# 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
}
TAGADA JONES (FRA) - Dissident (2014)

Label : At(h)ome
Sortie du Scud : 17 février 2014
Pays : France
Genre : Punk / Hardcore
Type : Album
Playtime : 20 Titres - 65 Mins
Tel le Mélenchon du Punk / Hardcore, tribun autoritaire et provocateur, TAGADA JONES repart en meeting. Je leur laisse le soin de continuer à politiser le sujet, car finalement la comparaison s'arrête pour moi à ce côté grande-gueule qu'ils ont en commun. Pour la huitième fois, les Rennais débarquent dans les bacs avec leurs beaux nez rouges afin de proposer Dissident, un nouvel album qui fleure bon le lisier, le charbon et les chrysanthèmes. En arborant cette fois-ci un visuel un peu différent des fois précédentes, Niko ayant donné de son image, les JONES font clairement dans le matraquage, puisque de retour aux affaires seulement quatre mois après 20 Ans d'Ombre & De Lumière, une rétrospective-anniversaire auréolée d'un DVD live qui célébrait deux décennies de dénonciations, d'engagements, de hauts mais aussi de (très) bas. Et si le quatuor est plus actif aujourd'hui que jamais, c'est surtout parce que cette société dont ils égratignent le fonctionnement leur donne toujours plus de raisons de blablater.
Ce n'est pas pour nous déplaire. Car qu'on soit d'accord ou pas d'accord avec le propos de TAGADA JONES (ce qui n'est pas très important en fin de compte), chaque sortie du groupe, sans exception, est une bonne occasion de se gargariser sur leur Punk / Hardcore nerveux et coupant, pas loin d'être ce qui se fait de mieux dans nos frontières. Leur coup de griffe est bien établi, bien défini. On ne va rien redécouvrir avec Dissident. Pire encore, de par sa richesse, sa caloricité, on frôlera l'indigestion. Car entre les reprises, les invités (comme chez Arthur, toujours les mêmes tronches), les nouveaux morceaux, on se prend vingt titres dans la gueule pour plus d'une heure de braillements. Costaud quand même. Mais en même temps, TAGADA JONES est réputé pour cette philosophie du je-me-donne-à-fond, qui n'en est que trop respectable. Comme à chaque fois, chacun pourra se sentir concerné par tel ou tel morceau, car il y en a autant pour le keupon, le métalleux ou le coreux. J'ai eu un peu de mal avec "De l'Amour & Du Sang", annoncé comme l'un des tubes de l'opus qui, malgré ses chœurs et ses lalalala, sonne un peu creux. Mon instinct de métalleux s'est davantage mis en éveil à l'approche d'"Instinct Sauvage", de son riffing Thrash et de ses paroles déjà entendues quelque part. "Refuse, résiste". Idem pour "Vendetta", correspondant totalement à mon idée personnelle du hit selon TAGADA JONES. Les premiers morceaux de Dissident sont donc cruciaux, ce qui ne sera malheureusement pas le cas des suivants, qui tournent un peu en rond et versent dans l'anecdote. Seules par exemple les paroles universelles de "Tout Casser" suscitent l'amusent, car la rigueur et la nervosité de ces excités du bulbe n'est plus vraiment un facteur à découvrir. Instinctivement ou pas, les Rennais ont alors placé en bout de course tous leurs guests, peut-être afin d'attiser la curiosité de l'auditeur et de donner un ultime coup de fouet à leur album. Citons pêle-mêle Vincent (AqME) sur "Vivre", Guizmo (TRYO) sur la tranquille "Dernier Rendez-Vous" ainsi que quelques Enragés ; Poun (BLACK BOMB A) sur "Ni Dieu Ni Maître", Reuno et Phil (LOFOFORA) sur "On Ne Chante Pas On Crie", Buriez (LOUDBLAST) et Pépel (ex-TAGADA JONES) sur "Blasphème". Mais bordel de merde, où est donc passé Schultz de PARABELLUM ? Scandaleux ! Quant à la reprise de "Skin Ou Keupon" des légendaires TULAVIOK, alors là c'est carrément collector, car je crois que pas grand-monde ne comprendra le symbole de cette cover. Preuve aussi que Dissident, capable d'aborder des thèmes qui nous touchent tous, n'oublie pas d'où il vient et aura une caresse rectale pour le keupon vieille école.
Il y a énormément de bonnes choses dans cette œuvre, qui navigue entre le (très) bon et le (trop) classique, pour ne pas dire le moyen. On ne changera plus TAGADA JONES, et c'est justement pour cet excès d'engagement qu'on les aime. Pour ma part, j'ai le souvenir d'avoir été davantage marqué par Descente Aux Enfers au moment de sa sortie. Je trouve qu'il manque à Dissident ces temps forts musicaux qu'ont pu être "Cargo", "Zéro De Conduite", "Les Nerfs A Vif", "Les Compteurs A Zéro" sur des albums analogues. Mais ne vous inquiétez pas, amis contestataires, révolutionnaires. Ne boudez pas la colère qui vous bloque la gorge, car TAGADA JONES est plus que jamais fidèle à lui-même ! Après vingt ans, c'est tout ce qui compte pour vous.
Ajouté : Dimanche 24 Août 2014 Chroniqueur : Stef. Score :     Lien en relation: Tagada Jones Website Hits: 9758
|