# 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
}
VERATRUM (it) - Sentieri Dimenticati (2012)

Label : Buil2kill Records
Sortie du Scud : février 2012
Pays : Italie
Genre : Death / Black Metal
Type : Album
Playtime : 10 Titres - 35 Mins
Là, ça devient franchement inquiétant. Je veux bien comprendre que les noms les plus dark-kikoo-ivoles soient tous réquisitionnés, mais il y a des limites à ne pas franchir. Allez en parler à VERATRUM, eux qui ont utilisé le nom latin du vérâtre blanc (veratrum album) comme blaze. La particularité de cette plante qui pousse comme un rhizome ? Sa toxicité, aussi bien pour le bétail que pour l'homme, qui la confond souvent avec la gentiane jaune (bah oui, quel con !). Son autre particularité ? C'est que tout le monde ignore son existence. Un peu comme VERATRUM quoi. Pour ce qui est de l'essentiel, à savoir la musique, il ne faut pas non plus chercher trop loin. Dans le sillage d'un groupe comme BELPHEGOR, les Italiens exécutent depuis 2008 un Death / Black à tendance "Suprême", un peu austère, un peu auguste, concrétisé en 2012 avec un premier album, Sentieri Dimenticati ("Chemins Oubliés") passé franchement inaperçu. Ceci étant, plusieurs éléments troublants laissent entrevoir un début d'éclosion pour ce combo plutôt doué.
L'opus démarre de façon ténébreuse, avec une obscure citation d'Helena Blavatsky, membre fondateur de la Société Théosophique, un concentré de cerveaux regroupés en une organisation philo-ésotérique ayant pour but de percer les mystères du "Divin". Vous l'aurez compris, dans le genre délires sur la réincarnation, la conscience universelle, l'évolution humaine et les chakras en tous genres, VERATRUM est un groupe gratiné. Je suis personnellement assez peu porté sur ce genre de concepts, mais il faut reconnaître qu'une fois les mots passés à la moulinette, la musique demeure infiniment substantielle. Ce Death Metal ultra-profond et artisanal nuancé de Black fait sensation. Sa très grande rigidité explose dès l'arrivée d' "Uomo", un pamphlet violent et un peu thrashy. Moins radicale, "Lo Sventramento Dei Guardiani Della Terra Cava" s'appuie sur un tempo lourd et des combinaisons rythmiques astucieuses pour mieux perforer le crâne de l'auditeur. Et à l'instar d'un DEADLY CARNAGE, l'utilisation de la langue italienne pour les paroles est un choix discutable mais qui donne énormément de relief et d'authenticité à cette œuvre, complètement dynamisée par les chœurs masculins qu'on retrouve sur "Ars Goetia". Puis, alors qu'on croit que Sentieri Dimenticati ne pourra pas être plus étoffé, on se retrouve avec "I Braceri Del Tempio Di Thot" entre les oreilles, une instrumentale aux relents arabo-mésopotamiens à mi-chemin entre ROTTING CHRIST et MELECHESH. Cette dernière ouvre d'ailleurs une voie royale à "Ritorno Ad Atlantide", peut-être la composition la plus représentative de leur personnalité musicale. Cette dernière, indiscutablement gâtée en termes d'inspiration, souffre à l'image de l'album, d'une production un peu crue, qui fait claquer la batterie comme des rondins de bois qui s'entrechoquent. Cette même production met beaucoup plus en valeur une piste Heavy et épique comme "Thule" par exemple, ce qui a le mérite de lui conférer une dimension dominatrice au bout de ces chemins oubliés.
Sentieri Dimenticati est un bloc étanche, avec des temps forts et des temps faibles mais surtout, beaucoup de diversité et de références culturelles (ce côté arabisant revient assez souvent) au cœur même d'un style habituellement hermétique. Prenez le Death / Black Suprême de BELPHEGOR, auquel VERATRUM fait constamment allusion. N'y a-t-il vraiment aucune légitimité à en extraire la substantielle moelle, quitte à broder autour ? Sous cette forme un peu plus spirituelle et musicale, le Death / Black en deviendrait presque un style attachant. Et ça, c'est l'unique propriété intellectuelle de VERATRUM et de ce premier effort franchement abouti.
Ajouté : Samedi 08 Mars 2014 Chroniqueur : Stef. Score :     Lien en relation: Veratrum Website Hits: 7422
|