# 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) - Gallery Of Suicide (1998)

Label : Metal Blade Records
Sortie du Scud : 21 avril 1998
Pays : Etats-Unis
Genre : Brutal Death Metal
Type : Album
Playtime : 14 Titres - 44 Mins
La Genèse selon CANNIBAL CORPSE, chapitre un ; verset six.
- Et CANNIBAL CORPSE constata avec regret que le mécanisme de l’univers qu’ils venaient fraichement de créer s’était déréglé. Les morts-vivants régnaient en maîtres absolus sur de vastes vallées sans âmes qui vivent. Les esprits possédaient des carcasses vides et le sens donné à ces créations se mourrait dans l’indifférence générale. Ainsi CANNIBAL CORPSE créa l’Homme à son image. Les plaies béantes se refermèrent, les hémorragies s’arrêtèrent. Les peaux livides reprenaient un aspect brillant et humain. Les vers étaient devenus cendre. Il ne restait plus qu’une banale coque d’adulte bipède. Ses cheveux étaient longs, son aspect normal. Il boitait. Il n’était pas effrayant. C’est ce qu’il renfermait dans son esprit qui l’était. Pour la troisième fois, il y eu un soir et il y eu un matin… ce fut le sixième jour.
Six, déjà six albums pour le combo américain ! Un chiffre qui inspire bon nombre de craintes aujourd’hui lorsqu’il est triplé. Pour eux, il représente surtout une forme de rachat, la nécessité d’un salut suite à un Vile en demi-teinte. Il est également synonyme du départ de Rob Barrett et de son remplacement par Pat O’Brien. Le dernier changement de guitariste avait eu l’effet positif d’aérer leurs compositions. Quid de celui-ci ?
Celui-ci provoque tout bonnement une révolution dans la conception des titres. C’est sans trop de risque qu’on peut affirmer que c’est ce qu’ils ont fait de plus harmonieux et mélodique jusqu'à présent (1998). Vous serez certainement tout stupéfaits d’entendre « From Squid To Liquid », une instrumentale aux frontières du Doom Metal côtoyer l’enivrante « Gallery Of Suicide » ou la patibulaire « Headless » et son leitmotiv technique à couper le souffle. Une fois de plus, CANNIBAL CORPSE revoit sa copie, change les codes et brouille les pistes. Impossible de savoir ce qui à bien pu dicter une telle conduite. George « Corpsegrinder » s’affirme de plus en plus dans son rôle de gueuleur ronchon. Lui qui était relativement transparent sur Vile à su se faire une place au soleil avec des vocaux plus que jamais malsains et abyssaux. Alex Webster à lui aussi retrouvé son statut de bassiste dynamique et présent. Il nous gratifie à d’innombrables reprises de ses accords de basse qui susurrent des mots pervers à l’oreille de leur Death. L’arrivée de Pat O’Brien fait aussi un bien fou au processus d’écriture. Combiné à Jack Owen, les deux font la paire et nous embarquent dans des territoires encore inexplorés, de plus en plus axés sur la finesse et la musicalité. Ne vous y trompez pas, les new-yorkais n’ont pas pour autant abandonné leur Gore Metal. S’il devient moins suggestif que par le passé, il n’en demeure pas moins toujours très offusquant et crade. « Stabbed In The Throat » ou « Sentenced To Burn » et leur cadence effrénée illustreraient sans mal le nouveau né de George Romero (*). Du moment que vos hématies se répandent sur le sol…
En alternant avec brio Brutal Death et Death technique, CANNIBAL CORPSE devient un tout jeune adulte dont l’enfance à propulsée le Death au rang de « style de Metal » à part entière. Désormais, plus jamais ce genre ne sera regardé de haut et recalé par l’élite. Gallery Of Suicide en est l’exemple même. Il scindera également définitivement dans son sillage « l’avant » et « l’après ». Cette horde à désormais dix années dans les dents et se permet légitimement d’évoluer vers quelque chose de plus « dans l’air du temps ». En tout cas une chose est sur, ce disque là, on l’aime ou on l’aime pas. Mais pas les deux.
(*) George Alfred Romero : réalisateur américain de films à tendances zombifiantes tels que « La Nuit des Morts-vivants », « Zombie », « Le Jour des Morts-vivants », « Le Territoire des Morts », « Chronique des Morts-vivants ».
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: 16193
|