# 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
}
LEGION OF THE DAMNED (nl) - Cult Of The Dead (2008)
Label : Massacre Records / Season of Mist
Sortie du Scud : 19 décembre 2008
Pays : Pays-Bas
Genre : Death / Thrash Metal
Type : Album
Playtime : 11 Titres - 42 Mins
Damned, voici un retour dont on se serait bien passés en cette période où les cœurs sont réchauffés par des gobelets de vin chaud, où Santa Klaus fait à nouveau office de cambrioleur attaché comme un pantin aux balcons et où flotte une bonne odeur de sapin dans les chaumières. Pour LEGION OF THE DAMNED, il n’en est rien. Leur nouvelle offrande hume plutôt le sang, la sueur et la chair décomposée. Un pot-pourri qu’on retrouve rarement autre part que dans les brûlots des hollandais. Que voulez-vous ? Il suffit de voir la pochette pour constater que les bataves font une nouvelle fois preuve de bon goût. Ça aurait pu être ironique, mais il faut bien avouer que cette cover est tout bonnement réussie et qu’elle colle à merveille avec cette notion de mort et de sacrilège qui va généreusement servir de concept à ce disque. Ils sont comme ça ; fins, légers, poètes déchus. A peine quatre ans qu’ils sévissent, les bougres et leur nom à déjà traversé les frontières d’Europe comme en témoigne leur participation au Wacken après seulement une année de présence.
L’origine profonde de cette invitation est bien évidement à chercher dans les propositions de ce groupe extrême, qui officie entre le Thrash et le Death. Tout un programme. Ambiance blasphématoire oblige, Cult Of The Dead ne pouvait commencer autrement que par une introduction horror/gothique et grand guignolesque façon « prépares-toi pour l’affenage, ça va chier ». Et effectivement, pour déféquer, ça défèque grave ! Nos hollandais envoient la sauce avec un « Pray & Suffer » aux rythmiques saccadées qui en feront bouger plus d’un. Musicalement, rien n’a bien changé par rapport à Feel The Blade apparu en début d’année ou même à Sons Of The Jackal qui avait fait grand bruit lors de sa sortie, il y’a deux ans de cela. On ne peut pas reprocher grand-chose à LEGION OF THE DAMNED qui est, semble t’il, bien décidé à rester sur son fondement pour ne pas se risquer sur un terrain abrupte. Mais force est de constater qu’au fil des minutes, la cadence diminue et l’intensité retombe jusqu'à un point où le squelette de leurs compositions commence à gonfler méchamment. Les guitares semblent avoir été bénites sur l’autel du Thrash, tant les références à SODOM ou KREATOR sont omniprésentes sur chaque morceau. La voix n’apporte rien de bien concret, Swinkels refaisant éternellement ses gammes dans des tons presque Black/Death dont la linéarité ne joue pas en sa faveur. Il n’y a, au final, que la batterie qui semble suffisamment rôdée, tenant jusqu’au bout son rôle, avec quelques enchaînements sympas et originaux qui garnissent épisodiquement l’opus. C’est bien famélique. Peut-être trop puisque à mon avis, les bataves ne doivent leur salut qu’a une entrée en piste fracassante, qui laissait augurer le meilleur. N’importe quel amateur reconnaîtra une indéniable qualité dans un « Black Templar», « House Of Possession » ou « Black Wings Of Yog-Sothoth ». Plus rares seront ceux qui jubileront à l’écoute d’un « Lucifer Saviour » ou « Necrosophic Rapture » qui tombe presque dans le Brutal Death. Dernière preuve du manque d’inspiration du quatuor : « Final Godsend » qui aurait du être renommée « This Is The End » tant Swinkels s’égosille avec cette phrase pour nous faire comprendre que c’est bientôt fini. Après quatre minutes de leur plus fade inspiration, LEGION OF THE DAMNED conclut Cult Of The Dead avec un solo de piano. Oui, c’est beau à pleurer mais non, ça ne colle absolument pas à leur œuvre. C’est comme dessiner des moustaches à Mona Lisa. N’est-elle pas déjà suffisamment laide ?
Abordant un thème déjà assez lourd de nature, Cult Of The Dead rend son écoute très longue et pénible avec un ersatz de Death/Thrash. Et au vu de leur CV, il n’est pas désuet de dire que ce disque est une déception.
Ajouté : Samedi 13 Décembre 2008 Chroniqueur : Stef. Score : Lien en relation: Legion Of The Damned Website Hits: 11115
|