# Copyright (C) 2002-2004 gregoire HUBERT.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# Author : gregoire HUBERT
#
# XML_node.objet
#
# This object is an XML node representation
#
# /- name (string)
# xml_node --- attributes (array)
# \- children (array) or value (string)
class xml_node {
var $name;
var $attributes = array();
var $children = array();
var $value = "";
function xml_node($name,$attributes,$children=array(),$value="") {
$this->name = $name;
if (is_array($attributes)) {
$this->attributes = $attributes;
}
$this->children = $children;
$this->value = $value;
}
}
# Copyright (C) 2003-2004 gregoire HUBERT.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# Author : gregoire HUBERT
#
# xml_tree class
#
# This object parses an XML stream and offers a tree composed by xml_nodes
#
class xml_tree {
var $xml_stream;
var $current_node;
var $root_node;
var $index;
var $value;
function xml_tree() {
$this->root_node = new xml_node("__ROOT_NODE",array());
$this->current_node = $this->root_node;
}
function add_tree($xml_stream) {
# Managing the parser
$this->xml_stream = $xml_stream;
$xml_parser = xml_parser_create();
xml_parser_set_option($xml_parser,XML_OPTION_CASE_FOLDING,0);
xml_parser_set_option($xml_parser,XML_OPTION_SKIP_WHITE,1);
if (!xml_parse_into_struct($xml_parser,$this->xml_stream,$this->value,$this->index)) {
xml_parser_free($xml_parser);
die("XML Parse error");
}
xml_parser_free($xml_parser);
# Now, $this->value and $this->index are informed, we can use the get_node methode.
$tab_result = $this->get_node(0,count($this->value) - 1);
$this->root_node->children[] = $tab_result[0];
$this->current_node = $this->root_node;
}
function get_node($index_start,$index_stop) {
#echo " \n";
#echo "GET-NODE($index_start,$index_stop) \n";
# What we are going to return is an array of xml_nodes
$return_tab = array();
# depth is only here to check if everything is all right
$tab_node = $this->value[$index_start];
$depth = $tab_node["level"]-1;
# Now we have to be sure we do not forget a single node
for ($index = $index_start;$index <= $index_stop;$index++) {
#echo "\$index = $index ";
# get the current node
$tab_node = $this->value[$index];
# what type of node is it ?
switch($tab_node["type"]) {
case "complete" :
# Depth integrity check
if ($tab_node["level"] != $depth+1) {
die("ERREUR # contrainte d'intégrité au noeud complet $index, niveau $depth + 1 au lieu de ".$tab_node["level"]);
}
#echo "Noeud complet trouvé position $index TAG ".$tab_node["tag"]." \n";
# Easy one, no children to manage, only a value...
$return_tab[] = new xml_node($tab_node["tag"],$tab_node["attributes"],"",$tab_node["value"]);
break;
case "open" :
# Depth integrity check
if ($tab_node["level"] != $depth +1 ) {
die("ERREUR # contrainte d'intégrité au noeud ouvert $index, niveau $depth au lieu de ".$tab_node["level"]);
}
# Open tag, we re-use this methode to return its children
# Where is the correspondong close tag ?
$node_index = $this->index[$tab_node["tag"]];
$flipped_node_index = array_flip($node_index);
#echo "This ".$tab_node["tag"]." is at coords ".$flipped_node_index[$index]." ";
$i=1;
do {
$next_index = $node_index[$flipped_node_index[$index] + $i++];
$next_tag=$this->value[$next_index];
}
while ($next_tag["level"]!=$tab_node["level"]);
#echo "Ouverture de noeud détectée pos $index TAG ".$tab_node["tag"]." \n Parcours jusqu au $next_index \n";
# good, we can now instanciate our node
$return_tab[] = new xml_node($tab_node["tag"],$tab_node["attributes"],$this->get_node($index+1,$next_index),"");
# As we called the get_node methode, we are sure that nodes have been parsed to the corresponding close tag
$index = $next_index;
break;
case "close" :
# Depth integrity check
if ($tab_node["level"] != $depth ){
die("ERREUR # contrainte d'intégrité au noeud fermé $index, niveau $depth au lieu de ".$tab_node["level"]);
}
#echo "Fermeture de noeud detectée pos $index TAG ".$tab_node["tag"]."
\n";
# This ugly thing is useless because reaching a close tag means that $index==$index_stop but who knows ? =)
# it will be skipped soon
$index = $index_stop;
break;
default:
die("Erreur de type de TAG non déterminé :'".$tab_node["type"]."'");
}
}
# We are out ... returns the array with collected children...
return ($return_tab);
}
# this function browse the xml tree and set the current node to the selected node
function give_node($path) {
if ($path[0]=="/") {
$current_node=$this->root_node;
$path=substr($path,1);
#echo "ABSOLUTE PATH GIVEN=$path ";
}
else {
$current_node = $this->current_node;
}
#echo "PATH GIVEN=$path ";
$tab_path = split("/",$path);
foreach ($tab_path as $node_expr) {
#echo "STUDYING EXPR='$node_expr' ";
$node = $current_node;
$expr_tab = split("\?",$node_expr);
$node_name = $expr_tab[0];
$attr_tab = 0;
if (count($expr_tab)>1) {
##echo "TROUVE AU MOINS UNE CONDITION SUR LES ATTRIBUTS... ";
$attr_expr_tab=split(",",$expr_tab[1]);
$attr_tab=array();
foreach($attr_expr_tab as $attr_expr) {
$attr_split_expr=split("=",$attr_expr);
$attr_tab[$attr_split_expr[0]]=$attr_split_expr[1];
}
}
$last=0;
foreach ($node->children as $children) {
#echo "COMPARING WITH '$children->name' ";
if ($children->name == $node_name) {
##echo "TROUVE NOEUD CORRESPONDANT $node_name ";
if (is_array($attr_tab)) {
$node_attributes = $children->attributes;
foreach ($attr_tab as $key=>$value) {
if ($node_attributes[$key] == $value) {
#echo "ATTRIBUTE & CHANGE CURRENT NODE TO ".$children->name." ";
$current_node = $children;
$last = 1;
}
}
}
else {
##echo "CHILD=".$children->name." ";
#echo "CHANGE CURRENT NODE TO ".$children->name." ";
$current_node = $children;
$last=1;
}
}
if ($last) {
break;
}
}
if (!$last) {
#echo "PATH ERROR $node_name ";
#die("MMmmmh It seems that this file is not a DIA XML format...sorry...");
return 0;
}
}
return $current_node;
}
function browse_tree($path) {
$node = $this->give_node($path);
if (is_object($node)) {
$this->current_node = $node;
return 1;
}
return 0;
}
# this method dumps an html representation of the xml tree
function xml_show($node = "",$level=0,$last=0) {
if ($node=="") {
$node=$this->root_node;
}
if (!is_object($node)) {
die("ERROR : node is not an object");
}
$line="";
for($i=1;$i<=$level;$i++) {
if ((i==$level-1) and ($last)) {
$line.=" ";
}
else {
$line.=" |";
}
if ($i==$level) {
$line.="`-";
}
}
$line.=$node->name;
#echo $line;
$line.="".count($node->children)."";
if (count($node->children)==1) {
$line.=" (".$node->value.") \n";
echo "$line";
}
else {
$line.=" \n";
echo "$line";
$i=1;
foreach($node->children as $children) {
if ($i==count($node->children)) {
$this->xml_show($children,$level+1,1);
}
else {
$this->xml_show($children,$level+1);
}
$i++;
}
}
}
#END_CLASS
}
THOSE BLOODY ARMS (FRA) - Those Bloody Arms (2013)
Label : N-Vox
Sortie du Scud : 29 novembre 2013
Pays : France
Genre : Hardcore / Metal
Type : Album
Playtime : 7 Titres - 25 Mins
TAGADA JONES, REVOLTED MASSES et maintenant, THOSE BLOODY ARMS. On peut dire que la transition entre 2013 et 2014 s'inscrit dans une veine résolument grande gueule. C'était moins évident sur le papier que pour TAGADA, coutumiers du fait depuis 20 ans, ou que pour le quintette grec, touché de plein fouet par la situation dramatique de son pays, mais vous allez apprendre à connaître ces Orléanais. Composé d'anciens membres d'HATEPOINT6 (Dave, Fred, Ju) et de BLOW YOUR WATTS (Antho) encadrés par Zag-Zero d'AKPHAEZYA, le groupe sort en ce 29 novembre 2013 son premier album éponyme, fort d'une pochette bras-dessus bras-dessous tout à fait appropriée. Car le crédo de ces garçons, si on ne l'a pas encore deviné, c'est le Hardcore fracassant. Celui qui balance, qui crache sa haine. Celui qui, dans l'esprit, faisait jadis la réputation de la Grosse Pomme.
THOSE BLOODY ARMS est plutôt fidèle à cet héritage, et nul doute que d'avoir ouvert pour BIOHAZARD est une aide précieuse. Cependant, l'identité musicale de ce projet ne demande rien à personne. C'est une chose qui se comprend dès l'arrivée de l'engagée "Apathy Slaves". Le riffing est sombre, sous-tension, en harmonie avec les paroles. Regression, repression. Les Orléanais sont en plein dedans, bien aidés par le chant façon chien-fou de Fred (qui n'y peut pas grand-chose s'il ressemble à Fred Durst). Un peu plus syncopée, "Feeding What I Am" apporte une couleur résolument Metal à cette palette d'émotions. Le camaïeu n'en demeure pas moins résolument dévoué à une orientation fixe. Je trouve même que les quelques efforts consentis pour nuancer ce propos, comme les backings vocals épurés de Dave sur "Apathy Slaves" ou "Insert", n'apportent pas beaucoup, si ce n'est de la confusion. THOSE BLOODY ARMS a les armes, le feu et la fougue pour taper dans ce Hardcore minimaliste mais fédérateur, et devrait s'en contenter. A l'instar des Alsaciens de SPITBACK, je pense que ce groupe a conscience de ne pas avoir inventé l'eau chaude, et qu'ils jouent plutôt bien sur le côté tradi du Hardcore pour sensibiliser son public le plus fidèle. Après, il reste cette facette "musicale" et métallisée qui se libère sur une composition comme "Insert". La rage demeure, la régularité se délite, même si ça ne permet pas de dépeindre ce premier album avec des termes péjoratifs. D'ailleurs, avec 25 minutes au compteur et seulement 7 morceaux, peut-on vraiment parler de full-lenght ? Vous venez d'Orléans les mecs, pas de Marseille ! Mais soit, accordons-leur ce prestige, d'autant que le contenu brut de Those Bloody Arms n'est pas représentatif des aspérités et hésitations inhérentes au format EP. Ils savent ce qu'ils veulent, et même si j'ai légèrement tendance à contester certaines nuances, c'est quand même extrêmement positif !
Autre élément de satisfaction : THOSE BLOODY ARMS a eu l'intelligence de distiller le mordant de son engagement idéologique pour l'injecter dans sa musique. Ainsi, ce premier album, en n'étant pas politisé mais juste révolté, est délesté d'un boulet qui aurait pu lui nuire. On ressent forcément certaines ondes contestataires, mais elles font juste le bon poids avec ce Hardcore / Metal humble et percutant. En ces temps difficiles où la contestation est justement devenue sport national, ça fait aussi du bien de tomber sur des musiciens-citoyens qui ont la tête sur les épaules.
Ajouté : Vendredi 01 Août 2014 Chroniqueur : Stef. Score : Lien en relation: Those Bloody Arms Website Hits: 7146
|