# 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
}
BELIEVER (usa) - Gabriel (2009)
Label : Metal Blade Records
Sortie du Scud : 14 avril 2009
Pays : Etats-Unis
Genre : Thrash Metal Expérimental
Type : Album
Playtime : 13 Titres - 61 Mins
Incroyable. Inespéré. Fabuleux. Fantasmagorique. Hallucinant. Orgasmique. Cosmique.
Non, je ne récite pas à voix haute ma liste d'épithètes à apprendre pour lundi, j'ai juste du mal à me remettre de l'écoute de Gabriel.
On le serait à moins.
Pensez donc.
Un fan de la première heure qui tombe sur l'album de la reformation d'un de ses groupes fétiches. Qui tremble et qui sue à l'idée que ce comeback pourrait être manqué. Oh, homme de peu de Foi, n'as-tu donc pas compris ?
Ils n'ont rien manqué.
C'est un tir en plein centre de la cible.
BELIEVER, remember? Extractions From Mortality, Sanity/Obscure, Dimensions. Ca vous parle?
Disparus de la circulation depuis 1994, plus personne ne s'attendait à entendre une fois de plus les cris sauvages de Kurt, et pourtant, ils sont bien là...Certes la voix se fait moins grave, les années ont passé, mais la rage est toujours là, au service du divin, et heureusement pour nous, des hommes.
On les avait laissés sur un troisième album qui approchait de la perfection, entremêlant Thrash sauvage et influences classiques grâce à l'apport d'un violoniste et d'une chanteuse d'Opéra, on les retrouve plus aventureux que jamais, avec un clavier/programmeur qui décidemment n'est pas là pour faire joli.
Qu'il est loin le temps des "Shadow Of Death" et autres "Unite" radicaux et naïfs...
Le BELIEVER 2009 s'est assorti à son époque, et devient sombre, sinueux, alambiqué. Mais attention, pas du joyeux n'importe quoi pour ruiner le jardin du voisin, non, l'ensemble est diablement (sic) structuré, pensé, mûri, pour taper là où ça fait le plus mal, en plein cœur de l'âme.
Car inutile de croire qu'ils ont changé leur fusil d'épaule, Dieu est toujours au centre de leur préoccupations, et l'archange Gabriel devient donc le héros de ce concept album qui convertirait bien des pêcheurs.
A l'image de sa somptueuse pochette, il est très difficile pour un non initié de pénétrer ces chansons sans éprouver un sentiment de surprise, voire d'incompréhension.
Car même si la base brutale est toujours là, avec ce jeu de batterie hallucinant, et ces guitares acides, la forme a pris une nouvelle silhouette, et les apports extérieurs inévitables au bout d'un certain laps de temps passé hors du feu des projecteurs sont venus enrichir une musique déjà très dense.
L'ouverture "Medwton", très classique, ne doit rouler personne. Elle n'est là que pour planter le décor, assurer les bases, et rassurer le following quant à la bonne santé du groupe.
Mais dès "A Moment In Prime", on se croirait perdu dans les méandres d'un album de MEKONG DELTA survitaminé. Arpèges abscons, voix en retrait, riffs dissonants...Un rêve...
"Stoned" pourrait s'être échappé d'un album de MESHUGGAH, en plus clean bien sur. "Redshift" commence comme un bon inédit de FEAR FACTORY, puis vire PRONG/KILLING JOKE, une touche indus, très légère, mais toujours une rythmique mi béton mi bancale...
"History Of Decline" entérine les débats, et déclenche les ébats entre le futuriste clairvoyant et la tradition insistante.
"The Need For Conflict" est une pure tuerie. Le meilleur de Dimensions à la sauce millénariste. Un riff écrasant, des arrangements électroniques pétrifiants, et un tempo qui s'emballe...Et nous n'en sommes qu'à la moitié de l'album...
"Focused Lethality" accélère un peu plus le propos et se fond dans "Shut Out The Sun", et son mid tempo accrocheur sur fond de guitares inventives et efficaces. "The Brave" joue l'intrigue à fond, et parvient même à sonner FAITH NO MORE, avec son chant à la Patton. Une autre grande réussite !
Et puis en guise de coup fourré envers le biz ou les fidèles qui auraient déserté, BELIEVER nous absout définitivement avec "Nonsense Mediated Decay" et ses huit minutes de délire sonore tribal high-tech. Instru-mental sans l'être, nos dernières défenses tombent, et nous voila de retour dans le confessionnal.
"Mon Père ?"
"Oui mon fils, je vous écoute"
"Comment ais-je pu douter de la puissance des chevaliers du Seigneur ?"
"Tu n'avais pas la preuve mon fils..."
"Et ?"
"Maintenant, tu l'as !"
L'office se termine sur "Freedom", toujours aussi novateur... Avec sa basse qui cogne et sa batterie qui sonne... Et les pèlerins se regroupent autour de l'autel pour savourer encore une fois les échos des prières.
"Que s'est il passé mes frères ?"
"Il est revenu"
"L'Elu ?"
"Oui"
"Vous l'avez vu ?"
"Non... Nous l'avons entendu..."
Que sa parole gronde encore pour des siècles et des siècles.
Amen.
Ajouté : Samedi 25 Avril 2009 Chroniqueur : Mortne2001 Score : Lien en relation: Believer Website Hits: 12295
|