# 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
}
MARTYR LUCIFER (it) - Farewell To Graveland (2011)

Label : Buil2kill Records
Sortie du Scud : 24 octobre 2011
Pays : Italie
Genre : Dark Rock / Metal
Type : Album
Playtime : 11 Titres - 56 Mins
Depuis la mise en stand-by de leur gagne-pain, les membres d’HORTUS ANIMAE se faisaient sacrément chier. Alors pour ne pas perdre la main, trois d’entre eux et un ancien de la maison ont choisi de monter le projet annexe MARTYR LUCIFER. Seulement voilà, pour que ça marche, il fallait forcément un peu de bling-bling dans l’affaire. Du coup, les italiens ont fait appel à deux vieux loups de mer pour aider à faire vendre le bousin. Evgeniy « Vrolok » Antonenko, ex-NOKTURNAL MORTUM, est venu dépanner à la basse, imité dans la foulée par Adrian Erlandsson qui cumule désormais les emplois fictifs à la batterie chez AT THE GATES, BRUJERIA, VALLENFYRE et PARADISE LOST. Pour couronner le tout, on a placé au petit bonheur la chance une énigmatique chanteuse sans références pour zinzinuler ça et là et boum, un énième projet de Dark Rock/Metal est né, comme seule l’Italie sait les pondre à la pelle.
Ils sont comme ça les italiens, un peu artistes incompris dans l’âme, encore sous le choc d’être les héritiers vivants du berceau de la Renaissance. Alors ils ont un peu tendance à croire que chaque riff de guitare sera un opéra de Vivaldi en puissance ou que chaque croute hideuse égalera le plus mauvais des Boticelli. Avec leur premier album, Farewell To Graveland, on ne pourra résolument pas parler de chef-d’œuvre, ni même se rapprocher du terme. Il y a des éléments totalement abstraits qui garnissent cet opus, à tel point que de le ranger dans une catégorie bien précise de Metal s’avère impossible. Il démarre avec une courte introduction qui ne manifeste aucune forme d’utilité, puisqu’indissociable de la chanson éponyme qui lui succède. Etonnamment, cette entrée en matière n’est pas très Metal, elle se rapproche plutôt d’une bonne chanson d’AC/DC dont les couplets seraient chantés avec un timbre grave. C’est entrainant, assez Rock N’ Roll dans l’esprit mais en total décalage avec cette froideur et cette austérité qui se dégage de l’enveloppe visuelle. On revient vite à des choses plus « conventionnelles » à partir de « Turmoil ». Les sonorités gothiques se libèrent, les guitares s’assombrissent et un fin crachin vient arroser un sol aride. Et finalement, on réalise dès lors qu’on préférait le MARTYR LUCIFER guilleret du début. Pourquoi ? Parce que cette œuvre essaye d’être triste, essaye d’être mélancolique mais n’y parvient à aucun moment. On n’arrive pas vraiment à pénétrer de plein pied dans un univers glacial. Les italiens se contentent de faire illusion en mettant la clim’ en plein hiver. Mais rien de tout ça ne parait vraiment naturel. Nul doute qu’une exploitation plus régulière et moins timide de leur chanteuse aurait permis d’authentifier un peu la forme. A défaut, on est confronté en permanence aux murmures de Martyr Lucifer (un frontman ténébreux qui a donné son nom de scène au groupe, ça ne vous rappelle rien ? Non, même pas GOTHMINISTER ?). Et le moins que l’on puisse dire, c’est que l’on s’habitue trop vite à sa présence et à son registre monotone. La fin de l’album devient particulièrement chaotique quand sur « The Horseride » longue de dix minutes, les transalpins revisitent les classiques avec l’ajout de pianos et claviers pompeux et d’une voix un peu plus Black Metal. Définitivement, MARTYR LUCIFER n’apporte rien de nouveau et ne peux même pas prétendre apporter sa pierre à l’édifice.
Ce premier disque est loin d’être catastrophique, il est juste totalement transparent, profondément enraciné dans ce qui se fait de plus banal en matière de Dark Metal à influences gothiques. Avec une chanteuse oubliée à l’extérieur du studio et deux invités de renom utilisés bien en-dessous de leurs capacités, les italiens gâchent bêtement des jokers précieux dans la course au succès. Farewell To Graveland est un essai qui se ballade tranquillement dans la nature, tel une âme en mal d’inspiration. Et regardez cette pochette, comme elle lui correspond bien.
Ajouté : Mercredi 13 Juin 2012 Chroniqueur : Stef. Score :    Lien en relation: Martyr Lucifer Website Hits: 8876
|