# 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
}
ENTHRONED (be) - Pentagrammaton (2010)
Label : Regain Records / Underclass
Sortie du Scud : 22 mars 2010
Pays : Belgique
Genre : Black Metal
Type : Album
Playtime : 11 Titres - 42 Mins
Dire que les légendes du Black Metal sont toujours bien portantes est un doux euphémisme. Alors arrêtons d’emblée les figures de style et comparaisons niaises qui fleurent bon l’herbe fraichement coupée et l’humus florissant, ENTHRONED va vous foutre une de ces ambiances avec son Pentagrammaton que vous allez vite perdre le gout à la vie et l’envie d’aller faire un tour de poney. Je croyais également, à l’heure où l’on s’approche du printemps, que les belges allaient nous livrer un truc un peu fleuri, chaleureux et bon enfant comme le dernier IMMORTAL, idéal pour se dégeler les orteils. C’était mal les connaître. Trois ans après Tetra Karcist, la rage a eu le temps de bouillonner en eux pour coucher le résultat sur une rondelle qui vous fera passer un sale quart d’heure. Niveau line-up, il y’a eu quelques modifications. Le très effrayant Nornagest est toujours en place aux incantations et à la guitare, tout comme Phorgath à la basse et aux chœurs. Mais Nguaroth et Ahéphaïm se sont fait souffler la vedette, au profit de Neraath et Garghuf, respectivement guitariste/chanteur et batteur. ENTHRONED est coutumier des changements, ce n’est donc pas une surprise si je vous dis que l’alchimie a très vite opéré malgré la refonte.
Une fois encore, la cible directe des suppôts de Satan est le christianisme. Religion perfide, peste mondiale qui gangrène le bas peuple. De ce côté-là, pas d’inquiétude à avoir : Nornagest, à sa façon de vociférer, n’est toujours pas baptisé ! Bien sûr, ce n’est qu’après une petite introduction aliénante en bon latin (« In Missi Solemnibvs ») que le carnage a lieu. Avec « The Vitalized Shell » d’abord, qui renoue avec une production très crade et old-school où les cordes pétillent et les percussions mitraillent. Encore une fois, je ne suis guère surpris, vu qu’ENTHRONED porte désormais les couleurs de Regain Records, autrement plus authentique dans ses productions Black Metal que Nuclear Blast. J’avais à vrai dire, quelques craintes concernant le remplacement de ce diable d’Ahéphaïm. Mais à l’image de DARK FUNERAL récemment, ENTHRONED s’est dégoté un diable de bon marteleur en la personne de Garghuf. Le bonhomme a une détente très vive et frappe avec fermeté et conviction. Le boulot derrière est donc facilité pour la section corde qui se contente de sortir des riffs Black typiques accommodé selon le rythme des morceaux, qu’ils soient effrénés (« The Essential Chaos ») ou plus mid-tempo (« Ornament Of Grace »). Les belges reviendraient presque à l’essence même de leurs croyances, si le souci du détail n’était pas parfois exagéré. Il y’a dans le Black une histoire de feeling. Je crois qu’ENTHRONED a davantage voulu nous conter une histoire d’horreur. Les ambiances sont glauques, presque à outrance. Il y’a une volonté de terrifier, un rapport soumis/dominateur, une grandeur édifiante. Nornagest s’impose comme un roc. On l’imagine blasphémer, torse bombé, droit comme un i. Menaçant. C’est l’impression que m’a laissé Pentragrammaton.
Evidement. Il y’aura toujours mieux ailleurs. Et je suis sans doute trop naïf pour comprendre quoi que ce soit à cet album. Mais le peu que j’ai compris m’a forgé la conviction que si ENTHRONED n’est pas le plus original ni le plus entrainant des groupes de Black Metal de cette planète, il est sans doute l’un des plus influent et effrayant qu’il m’ait été donné de croiser. Rien que pour cela, je pose un genou à terre. Vaincu.
Ajouté : Mardi 23 Février 2010 Chroniqueur : Stef. Score : Lien en relation: Enthroned Website Hits: 13109
|