# 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
}
EXODUS (usa) - The Atrocity Exhibition - Exhibit A (2007)

Label : Nuclear Blast / Pias
Sortie du Scud : 26 octobre 2007
Pays : Etats Unis
Genre : Thrash Metal Originel
Type : Album
Playtime : 9 Titres - 60 Mins
EXODUS, qui était vu dans les 80’s comme le digne successeur de METALLICA, à eu un plan de carrière assez peu linéaire comparé à ses collègues. Après un premier album jouissif, un second décevant (pas pour tout le monde), et un troisième miraculeux, la longue descente aux enfers à commencé avec la signature sur une major et un disque poussif (Impact is Imminent, et sa pochette risible à pleurer !), avant de tomber dans un oubli total et pas vraiment mérité.
Car ce qui caractérise bien Gary HOLT, c’est sa foi et son opiniâtreté. Il n’a jamais baissé les bras, et après avoir reformé le groupe en 2001, et sorti un album plus que décent (Tempo Of The Damned), 2005 a enfin été l’année de la révélation, avec le gigantesque Shovel Headed Kill Machine, accompagné du génial Lee ALTUS (ex HEATHEN), et du monstrueux Paul BOSTAPH (FORBIDDEN, SLAYER, etc.). Sans compter que Gary s’était enfin décidé à se débarrasser du calamiteux Steve SOUZA, qui au travers des années, n’a fait que gâcher des titres potables par ses intonations geignardes et approximatives.
EXODUS, avec The Atrocity Exhibition-Exhibit A reprend les choses telles qu’elles étaient il y a 2 ans. Avec toujours l’agressif Rob DUKES au micro, qui, n’en déplaise à certains, est LE chanteur définitif d’EXODUS, mais surtout le retour du génial et inspiré Tom HUNTING au kit, ce qui confère aux titres une fluidité bienvenue.
Alors le parallèle avec Shovel… est évident, mais on retrouve ici des recettes qui nous ramènent aux grandes heures de Fabulous Disaster. Après une intro très martiale, on tombe direct sur « Riot Act » et son riff directement découlé de « Fabulous Disaster », le titre. Une orgie heavy qui vous arrache vos restes de méfiance et vous embarque direct en plein cœur du massacre. S’ensuit l’énorme « Funeral Hymn » et sa pesanteur étouffante, qui finit par s’envoler sur un superbe duo de soli de Gary et Lee. EXODUS est en forme et ne tient qu’à une chose, le prouver. « Children Of A Worthless God » et sa structure calquée sur « Like Father Like Son » nous offre une virée épique au pays du Metal qui pique, typique, mais diablement exotique. Les riffs s’enchaînent sans faiblir, variété du ton, ampleur du son. Parlons si vous le voulez bien d’ailleurs de la production d’Andy SNEAP, une fois de plus irréprochable, avec ce coté massif, allié à une clarté individuelle de chaque instrument. Parfait en somme. « As It Was, As It Soon Shall Be » aère un peu l’ensemble, mélange de tradition et de modernisme, respecter sans stagner. La pièce de choix, « The Atrocity Exhibition » nous donne la claque attendue, majestueuse d’osmose entre cavalcades furieuses et marches lourdes de sens. Toutes les nuances sont passées au crible, étudiées, puis régurgitées dans un ballet orchestré pour baguettes et médiators enflammés. Le final inquiétant s’enfile directement sur « Iconoclasm » qui ne laissera aucun survivant, avec Tom au AK-47 qui canarde tout ce qui bouge, démonstration explicite de tout ce qu’un drum-kit peut compter comme percussion. Avec toujours les récriminations sacrement carnassières de Rob, qui n’en finit plus de verser sa bile sur les bien pensants. « The Garden Of Bleeding » malgré son titre, calme un tant soit peu les débats, avec son atmosphère épaisse et ses accords dissonants. Mais EXODUS sait comment clôturer un album, et « Bedlam 1-2-3 » vous atomise en beauté, en dispersant ce qu’il reste de vos cendres sur le champ de bataille, encombré de carcasses de blindés et de membres sanguinolents…
Alors oui, EXODUS est bien vivant, et il est inutile de se référer au passé pour le prouver. Les 80’s sont mortes, enterrées, et il serait vain de vouloir les faire revivre, même avec l’aide d’un magicien vaudou. Laissez Bonded By Blood et Fabulous Disaster où ils sont. Gary a toujours regardé vers l’avenir, ce qui est le propre des créateurs, et The Atrocity Exhibition n’a rien de passéiste, bien au contraire. C’est l’oeuvre d’un homme bien dans son époque, et qui à su évoluer avec le temps, sans renier son passé.
Je dis chapeau bas M.HOLT. Mais par pitié, la suite, vite !!!
Ajouté : Mercredi 31 Octobre 2007 Chroniqueur : Mortne2001 Score :      Lien en relation: Exodus Website Hits: 15363
|