# 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
}
WAKING THE CADAVER (usa) - Real-Life Death (2013)
Label : Amputated Vein Records
Sortie du Scud : 5 novembre 2013
Pays : Etats-Unis
Genre : Death Metal Brutal
Type : Album
Playtime : 8 Titres - 29 Mins
Quelle joie, quelle plénitude pour un chroniqueur aussi bête que méchant, que de pouvoir écrire une fois encore pour ce qui est considéré comme "le pire groupe du monde". Dieu merci, les Américains de WAKING THE CADAVER ne sont pas des mecs très susceptibles, ce qui nous permet de pouvoir encore évoquer en 2013, neuf ans après le début d'une carrière entamée sous le nom de DEATH TO HONOR, une des épidémies les plus virulentes de coliformes fécaux jamais enregistrée par le Service des Affaires Sanitaires. Alors forcément, quand déboule Real-Life Death au détour d'une ruelle vaporeuse dans son costume de croquemitaine du dimanche, on part dans l'idée qu'on va à nouveau se payer une bonne tranche de rigolade. Sauf que depuis la mise à mort de Beyond Cops. Beyond God, WAKING THE CADAVER ne semble plus tellement enclin à passer pour le bouffon de service, et qu'en ce sens, ils préfèrent désormais susciter indifférence et neutralité que moqueries inoffensives.
Beyond Cops. Beyond God formulait déjà un semblant de mea culpa par rapport à Perverse Recollections Of A Necromangler mais alors là, laisse tomber ! Ok, Real-Life Death est bien meilleur, autrement plus crédible dans son rôle de disque "trve slamming gr00vy br00tal Deathgore", car armé de nouvelles munitions (forcément, quand tu as dans ton équipe papy John Hartman, le guitariste historique de MORTAL DECAY, tu essaies de pas trop te chier dessus). Tout ça est bien joli, mais où est le charme dans l'histoire ? Où est cet amateurisme désarmant, cette nullité effrayante, cette écriture catastrophique et cette exécution hésitante, qui rendaient WAKING THE CADAVER si attachant ? En vérité, ce troisième album est banal, il indiffère. Le cadavre lardé de coups laissé derrière lui par le groupe est tiède. Don Campan, dont les pig-squeals monocordes étaient la risée des porcheries du monde entier, fait désormais dans un sous-John Gallagher (DYING FETUS) de bas-étage, et ça va finalement bien avec ce riffing rangé, inscrit dans une véritable logique de Slamming Brutal Death ponctué de breakdowns Beatdown millésimés. Le genre à faire mouliner les bras et les jambes des furieux dans le pit. Tout ce bazar est étrangement coordonné, ce qui fait assurément la pauvreté de ce Real-Life Death. C'est d'ailleurs une pauvreté nouvelle pour un groupe habitué au bricolage que d'avoir pour richesse un minimum de professionnalisme (et les regards peuvent converger une nouvelle fois sur John Hartman, qui a définitivement imprimé sa patte de vieux briscard sur ces puceaux rigolos). Avec en morceaux de choix les radicales "Money Power Death", "Lumped Up" ou encore "Business As Usual" (une phrase récurrente dans le vocabulaire minimaliste du tueur en série américain Arthur Shawcross), impossible de contourner la fatalité : ce nouvel album de WAKING THE CADAVER est glauque, brutal, écrasant, mais aussi désespérément chiant.
Après tout, c'est une belle histoire que sont en train d'écrire ces garçons. Un peu égoïste mais instructive... On peut effectivement faire d'un bourricot un cheval de course. C'est ça l'enseignement de Real-Life Death ! Ils courent tous sur la même ligne, ils se ressemblent tous, leurs pattes fracassent le sol dans une symphonie synchronisée mais c'est pas grave, puisque l'essentiel ce n'est désormais plus de participer mais de se fondre dans la masse. Honnêtement, je leur souhaitais de réussir enfin quelque chose dans leur carrière, et que la presse spécialisée (dont nous faisons partie) leur lâche la grappe. Mais avec le recul, je regrette le WAKING THE CADAVER empoté, ordurier et bourré de beaufitude de la période Beyond Cops. Beyond God, car il nous donnait encore envie de lui défoncer sa petite gueule de con.
Ajouté : Samedi 23 Août 2014 Chroniqueur : Stef. Score : Lien en relation: Waking The Cadaver Website Hits: 6540
|