# 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
}
FORGOTTEN TOMB (it) - Under Saturn Retrograde (2011)

Label : Agonia Records
Sortie du Scud : 22 avril 2011
Pays : Italie
Genre : Black Metal dépressif
Type : Album
Playtime : 9 Titres - 51 Mins
Le marathon FORGOTTEN TOMB continue ! Rattraper un retard de trois albums en trois jours sans aboutir au taillage de veine relève, pour la peine, d’un exploit bien plus retentissant qu’un vulgaire saut stratosphérique. Il aura fallu attendre quatre ans pour voir arriver le successeur de l’incroyable Negative Megalomania, qui marquait à son époque un virage très surprenant pour ce groupe de Black Metal dépressif. Doucement mais surement, on tend à s’orienter vers quelque chose de moins abrupte et d’un peu plus touffu, s’éloignant progressivement des thèmes musicaux entendus et réentendus qui inspirent la misanthropie, le suicide, la dépression. Et ce Under Saturn Retrograde persiste et signe ! Forts désormais d’un Black N’ Roll très inspiré, les Transalpins vont asseoir un peu plus leur domination sur la scène européenne.
Parce qu’après un tel effort, il apparaitra comme évident que personne sur le vieux continent n’est capable de jouer comme eux. Il y a bien Kvarforth de SHINING qui s’y est essayé, non sans un certain succès, mais depuis son Halmstad de 2007, le groupe et son grotesque leader, probablement trop occupé à jouer dans sa salle de bain avec des chattes en plastiques, ne donne plus aucun signe de vie artistique. Et FORGOTTEN TOMB n’aura surement pas eu besoin de cette surprenante défection pour poursuivre son œuvre morbide. Morbide comme sa tête pensante, Herr Morbid, qui avait créé la sensation sur le précédent disque avec l’utilisation d’un chant relativement clair et qui insiste ici sur une chanson de la trempe de « Shutter ». Avec ce cinquième album, les Italiens achèvent le mur qu’ils avaient commencé à bâtir après le Love’s Burial Ground de 2004. Moins axé sur le Black pur et dur teinté de mélancolie et mettant davantage l’accent sur le groove et la perfidie d’un Black nuancé de Heavy et de Rock N’ Roll, cet opus n’est pas une progression au sens propre du terme, car il ne tranche pas vraiment d’avec son prédécesseur. Les efforts sont principalement concentrés sur la production, d’une remarquable pureté pour du soi-disant Depress Black Metal et sur les ambiances mortuaires. Rassurez-vous, FORGOTTEN TOMB n’a pas laissé la recette de son succès au vestiaire et continue de distiller habilement des ambiances tombales dans sa musique. Le résultat est glaçant de cynisme, parce que ces mecs savent que leur nom fait frissonner. Et ils s’efforcent de déjouer tous les pronostics en proposant des morceaux aux structures plus imprévues que jamais. Seulement, si la maitrise technique reste la même, l’effet de surprise s’est évaporé. La grande force de Negative Megalomania résidait dans sa simplicité : cinq morceaux très cohérents dans la durée et dans l’intensité, plus d’une heure d’un Metal noir comme l’ébène et pourtant si lumineux. Under Saturn Retrograde est plus chargé, plus détaillé. Composé de neuf titres assez inégaux (le plus long morceau, « You Can’t Kill Who’s Already Dead » est à peine trente secondes plus long que le plus court morceau du précédent disque), il a besoin d’anecdotes pour briller. L’excellente reprise des STOOGES avec « I Wanna Be Your Dog », les voix viriles et érotiques de « Joyless » ou la deuxième partie de l’éponyme (« Under Saturn Retrograde Part II »), à l’ouverture calme et apaisante, seront autant de petits faits de jeu qui feront tout le contraste de ce full-lenght. En de ce fait, on ne peut s’empêcher de penser que cette sortie, tout en consolidant l’assise offensive de FORGOTTEN TOMB, est peut-être la moins aboutie de leur discographie.
Son plus gros défaut est certainement d’intervenir directement après Negative Megalomania sans opérer de changements majeurs, si ce n’est de durer moins longtemps et d’avoir plus de pistes. Très peu surprenant mais toujours aussi efficace, Under Saturn Retrograde est loin de faire tâche au cœur d’un C.V d’une richesse incroyable. Mais quand même… Ces garçons nous avaient habitués à une telle inconstance musicale que le peu de régularité qui régit leur cinquième bébé laisse forcément un gout d’inachevé en bouche. Surement le gout du sang.
Ajouté : Mercredi 24 Octobre 2012 Chroniqueur : Stef. Score :     Lien en relation: Forgotten Tomb Website Hits: 10662
|