# 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
}
SIX FEET UNDER (usa) - Unborn (2013)
Label : Metal Blade Records
Sortie du Scud : 15 mars 2013
Pays : Etats-Unis
Genre : Death Metal
Type : Album
Playtime : 11 Titres - 36 Mins
Si les poux et les lentes de Chris Barnes ont le même destin que leur hôte, alors on peut dire qu'ils revivent. Après avoir été la risée de la scène Death Metal avec des albums indécents comme Bringer Of Blood, True Carnage ou encore la parenthèse des Graveyard Classics en 2000, 2004 et 2010, SIX FEET UNDER s'est finalement repris, tout d'abord avec un Death Rituals passable en 2008 puis avec l'inattendu Undead en 2012. Bien sûr, ce Death Metal rongé par l'arthrose et dévasté par le Lexomil n'a pas soudainement retrouvé ses jambes de vingt ans. Il parait même que le pôle gériatrie du James A. Haley Veterans Hospital de Tampa est toujours sans nouvelles de Chris Barnes. Pourtant, coller à ses basques n'est pas le plus difficile. Il suffit de suivre les mouches. Encore que, certains pourraient être surpris par la tournure des évènements. On est ici en face d'Unborn, et de la pochette au nom du disque, tout fait écho à Undead qui le précède de… 10 mois seulement ! S'il n'y a pas de continuité entre ces deux opus, alors je veux bien ne plus jamais me servir de l'ombre d'instinct que j'avais.
Comme de coutume, on va commencer par évoquer les différents changements de line-up qui causent bien du tort à chaque sortie estampillée S.F.U. Rob Arnold, l'ex de chez CHIMAIRA aura tenu le temps d'une pige, avant d'être remplacé par Ola Englund, un guitariste suédois qui a déjà performé pour SCARPOINT. Autre changement notoire, depuis le départ de Terry Butler en 2011, le poste de bassiste était inoccupé. Le sede vacante n'a désormais plus lieu d'être avec l'arrivée de Jeff Hughell (ex-BRAIN DRILL). C'est avec un line-up à peu près cohérent (et un membre de plus) que les Floridiens abordent ce qui est mine de rien leur treizième full-lenght. Et à son écoute, on peut espérer qu'ils fassent durer encore un peu le plaisir. Unborn est un sursis pour Barnes et les siens. Après un long déclin, les Américains ont entamé depuis deux sorties une phase de stagnation, ce qui est toujours mieux qu'une chute sans fin. Fort d'un riffing qui retrouve un peu de pêche, qui renoue avec un Death Metal plus conventionnel et moins léthargique (« Decapitate », « Alive To Kill »), cet opus est déjà susceptible de faire des heureux. Je n'ai pas peur des mots, c'est une vraie et belle renaissance. On prend beaucoup de plaisir à l'écoute de ces quelques compositions, principalement parce qu'on réalise qu'enterrer trop vite Barnes était une erreur. Les mea culpa vont tomber. « Prophecy » est lancinante, « Neuro Osmosis » très Heavy, « The Sinister Craving » pachydermique. Sentir différentes émotions vous traverser au fur et à mesure qu'Unborn déroule est quelque chose de fascinant, d'insoupçonné. SIX FEET UNDER, ce projet habituellement si plat, si pantouflard, énervant de placidité, offre purement et simplement du bon Death Metal. Certes, ça reste tristement classique mais au moins, on ne s'emmerde pas et ça, c'est une nouveauté qui est en train de devenir une habitude. Il était temps. Ce second souffle n'est pas tombé du ciel. De nombreux invités ont participé à l'enregistrement, à commencer par Benjamin Savage de WHITECHAPEL qui touche à la guitare sur quatre chansons (dont « Decapitate »). On retrouve également à la guitare sur « Inferno » et « Psychosis » un certain… Rob Arnold, le même qui aura fait un passage éclair dans le groupe entre 2011 et 2012. Enfin, le grand Finlandais Jari Laine de TORTURE KILLER vient lui aussi gratter sur trois compos, parmi lesquelles ce qui est pour moi le meilleur titre d'Unborn : « Zombie Blood Curse ». Tellement Rock N' Roll, tellement groovy, tellement sans gêne, ce titre est l'évocation même du Death N' Roll malin et percutant, le pendant Death du Black N' Roll assumé de SATYRICON. Un vrai bon moment qui n'inspire rien d'autre que la sympathie.
Parmi les retours les plus improbables, oui, il y a bien en 2013 celui de SIX FEET UNDER. Alors qu'Undead avait déjà été une agréable surprise un an plus tôt, les Floridiens ont récidivé. Et franchement, ce treizième album est tellement dans la continuité du douzième, visuellement mais aussi dans l'esprit, que le résultat ne pouvait pas être bien différent. Death Metal léger, facile, téléphoné, simpliste, oui, il y a de ça à l'intérieur d'Unborn. Mais il y a surtout un Death Metal viscéral et potable, ce qui équivaut pour SIX FEET UNDER à un curé qui prend goût aux plaisirs de la chair après une vie de célibat forcé. Et dans ce cas là, ce sont toujours les enfants qui trinquent.
Ajouté : Jeudi 23 Mai 2013 Chroniqueur : Stef. Score : Lien en relation: Six Feet Under Website Hits: 8086
|