# 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
}
CANNIBAL CORPSE (usa) - The Wretched Spawn (2004)
Label : Metal Blade Records
Sortie du Scud : 24 février 2004
Pays : Etats-Unis
Genre : Brutal Death Metal
Type : Album
Playtime : 13 Titres - 44 Mins
La Genèse selon CANNIBAL CORPSE, chapitre un ; verset neuf.
- Et CANNIBAL CORPSE, fatigué de son œuvre, s’assoupit longuement. Durant ce temps, une femme pénétra dans le jardin des haines. Elle était fascinée par la beauté de l’arbre central. Ses fruits brillants contrastaient avec la laideur de ses semblables. C’est alors qu’un serpent descendit le long du tronc. Il interrogea la femme sur l’interdiction de toucher au fruit défendu. Le plus rusé de tous les animaux lui rappela le nom de la plante ; l’arbre de la connaissance du bien et du mal. Il l’embarqua dans des phrases doucereuses. Pourquoi l’Homme n’avait-il pas le droit à son tour, d’être un Dieu ? Elle croqua le fruit, en fit goûter à son partenaire. Le ciel se couvrit de nuages d’un noir d’ébène. CANNIBAL CORPSE s’était réveillé.
Ils sont de retour ! Ils se sont réveillés ! Pas à leur meilleur niveau, certes, mais ils ont décidé de se reprendre en main. Presque deux ans jour pour jour après le médiocre Gore Obsessed, nos américains repartent sur la route, le baluchon rempli d’intentions louables et de bonnes idées.
La première est de renouer avec une imagerie crade et sanguinolente. Nous revoilà gratifiés d’une pochette barbare et explicite, comme au bon vieux temps. Seul un gynécologue mort-vivant peut s’enthousiasmer de voir des bébés goules sortir de la bouche, des entrailles et de l’utérus de ses patientes. Alors on se dit que « bon, heureusement qu’ils sont dans le coin, ils pourront aider cette pauvre fille qui accouche de monstres dans la souffrance et qu’on avait plus vu une si bonne idée depuis Tomb Of The Mutilated, ce qui, non d’une cicatrice purulente, remonte à déjà douze ans ». On se dit aussi en écoutant le palet que « non d’une ablation d’un furoncle gangréné, ça doit aussi bien faire douze ans que les bouchers n’ont plus été aussi performants ». En effet, pourquoi ne pas commencer par l’incroyable performance de George Fischer qui nous envoie dès le début un coup de rangers dans le bide sur « Severed Head Stoning » avec un flow hallucinant et une profondeur vocale encore inégalée. Mais quel est le génie qui lui a versé trente gouttes d’extrait de gingembre dans son Cacolac au lieu de trois ? Le monsieur a l’air d’avoir été pris d’une gaule phénoménale, tant son chant est malsain, puissant et guttural. Autre grande nouvelle, on a retrouvé le petit Alex Webster. Notre agneau s’était égaré au rayon sex-toys de son hypermarché Carrefour. Après quelques jours en cellule de dégrisement, il a retrouvé goût à son grand amour : la basse. Il le fait d’ailleurs bien comprendre sur des plages comme « The Wretched Spawn » ou « Nothing Left To Mutilate ». Monsieur Mazurkiewicz (batterie) est aussi de retour. Fidèle au poste, il semble avoir bu quelques lampées dans la fameuse fontaine de jouvence. Ses frappes sont à nouveau intelligentes et précises. Et puis bien sûr, gros coup de chapeau à Pat et Rob (guitares) qui s’éclatent à nouveau. Les riffs sont des plus tranchants et tous effectués dans un esprit médical. Le travail doit être à la fois minutieux et bien fait. Objectif atteint ! Attention, je ne vais pas jusqu'à dire que cet album est très bon. Ça reste du Brutal Death de décérébré, sans foi ni loi ni réelle surprise sur la valeur intrinsèque de l’opus. Mais on ne peut que s’en réjouir. Cela faisait trop longtemps que la formation stagnait.
Il va de soi que le concept ne vole toujours pas bien haut, mais CANNIBAL CORPSE à le mérite de faire les efforts nécessaires à sa survie. Le deal était connu depuis longtemps : « cette fois ci, ça passe ou ça casse ». Ils ont réagi juste à temps, et c’est tout à leur honneur. Qui sait, peut-être même que les américains entament avec The Wretched Spawn, une seconde vie ? Sur ce coup, papy fait clairement de la résistance.
Discographie Complète de CANNIBAL CORPSE : Eaten Back To Life (Album - 1990), Butchered At Birth (Album - 1991), Tomb Of The Mutilated (Album - 1992), The Bleeding (Album - 1994), Vile (Album - 1996), Gallery Of Suicide (Album - 1998), Bloodthirst (Album - 1999), Gore Obsessed (Album - 2002), The Wretched Spawn (Album - 2004), Kill (Album - 2006), Evisceration Plague (Album - 2009), Torture (Album - 2012)
Ajouté : Lundi 02 Février 2009 Chroniqueur : Stef. Score : Lien en relation: Cannibal Corpse Website Hits: 15345
|