# 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
}
NIRNAETH (FRA) - Splendour Of The Abyss (2009)

Label : Great Dane Records
Sortie du Scud : 1er décembre 2009
Pays : France
Genre : Black Metal
Type : Album
Playtime : 9 Titres - 39 Mins
On ne compte plus les groupes ayant emprunté leur nom à l’univers de Tolkien. NIRNAETH s’ajoute à la longue liste puisque ce mot signifie « larme » en Sindarin. On s’en tiendra à ça pour la minute culturelle, car je pense qu’il y a beaucoup d’autres choses à dire de ce combo lillois, qui doit forcément être un peu chafouin de se voir répéter inlassablement ce détail. Au-delà du paradoxe qui relie Tolkien à des valeurs chrétiennes et NIRNAETH à des valeurs un peu moins chrétiennes, le quartet de « ch’tis biloutes » est un des artisans majeurs de la scène Black Metal en France. Actifs depuis bientôt dix ans et forts d’un premier album aux reins solides (Thrown Athwart The Darkness) paru en 2006, la formation a fait en 2009, un pas de plus vers les hautes sphères de la scène Black français avec son Splendour Of The Abyss qui n’a pas mis trop de temps à trouver grâce auprès du public et de la presse spécialisée. Analyse.
La pochette évolue déjà dans un registre assez subtil. Vue de loin, c’est un œil classique, un regard sombre qui met mal à l’aise, un peu dans le même style que la pochette de Traitors To Mankind de TEMPLE OF BAAL. Vue de près, l’iris est composé d’un amas de cadavres puants qui ne sont pas sans rappeler les heures les plus sombres de l’Histoire. Subtil, vous dis-je ! Une fois la galette dans le mange-disque, on constate que NIRNAETH s’est considérablement affiné. Le Black lorgnant sur le Death des débuts en a fini avec ses écarts de conduite. Les lillois se montre plutôt traditionnalistes, avec un Black torturé, somme toute des plus classiques, mais aussi des plus efficaces. Les frappes de guitares du seul Mutill sont précises, versent régulièrement dans le Thrash et confèrent à l’ensemble une dimension parfois atmosphérique, tout du moins épique. Grosse surprise, la basse de Malaria résonne à plusieurs reprises, sans qu’on ait besoin de tendre l’oreille pour s’en assurer, ce qui en rajoute à l’incroyable noirceur que dégage cet opus. Car définitivement, cet album a pour ambition de vous compresser le crâne. C’est un étau duquel on ne peut se dégager sans séquelles. Tout se déroule dans une ambiance assez surréaliste, tant la fluidité des compositions se ressent. NIRNAETH est une mécanique huilée jamais prête à flancher. Le compromis entre violence perverse et autorité révérencielle est très intéressant, car rarement un groupe n’est parvenu à équilibrer aussi bien les deux. SETHERIAL le fait pas trop mal, GLORIOR BELLI également. Après, NIRNAETH verse parfois dans le very old-school façon OLC SINNSIR voire ANTAEUS. Jamais en rade d’un passage groovy pour décupler ses forces, la bande peut aussi s’appuyer sur un vocaliste talentueux certes, mais qui aurait pu trouver un meilleur pseudo : j’ai nommé Zigouille. Niveau ressemblance, on se rapproche des screams très aigus d’Ashmedi (MELECHESH) en collaboration avec un timbre plus marqué et grave. Un mariage idyllique avec les instrumentistes. Techniquement bien au-dessus de la moyenne, Splendour Of The Abyss réussit à faire appuyer là où ça fait le plus mal.
Je me suis longtemps demandé pourquoi cet opus n’a pas trouvé preneur parmi mes collègues, car avec NIRNAETH, c’est comme avec Uncle Ben’s : toujours un succès. Cette sortie, qui n’a pas fait l’objet d’un gros tapage médiatique, ne mérite pas pour autant de passer inaperçue. NIRNAETH, au-même titre que DEATHSPELL OMEGA, GLORIOR BELLI, BLUT AUS NORD, fait partie de ces noms de la scène française sur lesquels on peut compter. Sans être de fins créateurs, ils parviennent à toujours repousser leurs limites et à revisiter les bases de leur art pour vous offrir quelque chose d’unique et qui passe, dans n’importe quelle situation.
Ajouté : Lundi 01 Août 2011 Chroniqueur : Stef. Score :     Lien en relation: Nirnaeth Website Hits: 11478
|