# 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
}
U.D.O. (de) - Dominator (2009)
Label : AFM Records / Underclass
Sortie du Scud : 2009
Pays : Allemagne
Genre : Heavy Metal
Type : Album
Playtime : 10 Titres - 44 Mins
On est là, autour d’un bon repas, avec le père Blasphy De Blasphèmar, à se remémorer la gloire passée de légendes déchues comme ACCEPT, citant avec les yeux qui brillent les noms d’albums aussi mémorables qu’indémodables : Balls To The Wall, Metal Heart, etc … A grands coups de « Princess Of The Dawn », « Metal Heart », « Fast As A Shark », « Screaming For A Love Bite », « Living For Tonite », le commando teuton était devenu le compromis parfait entre le riff imparable d’AC/DC et la puissance métallique de JUDAS PRIEST.
Lorsqu’ACCEPT commença à se disloquer, le nain hurleur en treillis Udo Dirkschneider entama une carrière solo dans la lignée des précédentes réalisations de son ex-groupe. Et même la courte reformation d’ACCEPT, au détour d’un convenu Objection Overruled, d’un moyen Death Row et d’un osé Predator, n’empêcha pas ce petit bonhomme de quitter à nouveau le navire. Il avait en effet trop peu goûté l’excessive audace dudit Predator, lui, l’ardent défenseur du Heavy Metal traditionnel.
Mais là où le mystère fait place à l’incompréhension au sujet d’un parcours supposé mythique (au pire, respectable), c’est quand on évoque enfin la qualité du nouvel opus d’U.D.O., le groupe. Comment l’ex-chanteur d’ACCEPT peut-il nous avoir offert tant de joyaux par le passé, et proposer du matériel aussi prévisible aujourd’hui ? Comment la recette a-t-elle pu aussi bien fonctionner en 1985 et provoquer un tel pet foireux en 2009 ? Ce Heavy Metal là serait-il celui d’une autre époque ?!... En un sens, oui. Le seul fait d’entendre la voix de Dirkschneider suffit à susciter une certaine nostalgie. Udo a toujours le même timbre, celui du rejeton de Brian Johnson et d’une truie en pleine crise d’hystérie. L’hystérie est-elle un phénomène déjà constaté chez les truies ? Oui, Udo en est la preuve vivante (« grouuuiiiiiiiiiiiiiiik ») …
Cependant la nostalgie a parfois du bon. Entendre un « Black And White », mid-tempo ravageur, mélodique quand il le faut, carré quand ça s’impose (et moi j’aime quand c’est Carré !), dans l’esprit du « Dogs On Lead » de Metal Heart, eh ben ça fait du bien. Un vrai panard. Et même si « Heavy Metal Heaven » se veut désespérément conventionnel, son rythme alourdi, son refrain avec ses nombreux chœurs et son final à deux guitares (Stefan Kaufmann et Igor Gionola aux six-cordes) ramènent au ACCEPT le plus jouissif. Là où ça commence à merder, c’est quand « Doom Ride » pose les bases même du Heavy Metal, celui qui fait taper du pied, et ne parvient pas à passer la seconde : que manque-t-il ? Un break accrocheur ? Un refrain plus inspiré ? En tous cas on ne s’est pas foulés chez U.D.O. …
Et alors ce titre d’ouverture, pfioouuuu ….. Sûr qu’en live, ça doit tout péter, mais alors quel manque d’imagination ! Un riff commun de chez commun, quelques lignes vocales les plus simplistes au possible sur le refrain, tout ça pour dire que « The Boogeyman » rappelle le plus mauvais album de JUDAS PRIEST, Demolition, symbole d’artistes sans inspiration … Quand le Heavy devient ennuyeux, attention danger. Et ce n’est pas en accélérant le tempo (« Infected », « Speed Demon ») qu’ U.D.O. s’en sort mieux hein. Il faut peut-être voir en « Dominator » un discours politisé conte l’oppression subie par de nombreuses populations du monde, mais voilà quine rattrape pas ce niveau bien faible. Et mieux vaut oublier « Devil’s Rendez-vous » et ses faux airs de folklore russe qui atteignent le ridicule à la perfection. Mais Udo qu’est ce que tu nous a fait ?!!! En même temps on ne peut pas dire que tes précédents opus (genre Mastercutor ou Thunderball) respirent le Metal tout frais mais quelque part, tel un supporteur du PSG (*), on espère malgré tout !
Pour en finir avec Dominator, oui parce que l’exercice est pénible, il faut bien le dire, disons que deux titres sortent du lot, provoquant un certain étonnement. D’abord « Stillness Of Time », chanson typée années 80, fausse ballade avec nappes de claviers et super solo, met en avant un Udo plutôt à l’aise dans le registre AOR. Et puis la vraie ballade, « Whispers In The Dark », plutôt réussie contre toute attente.
Alors de grâce, malgré ces « bonnes » surprises, s’il te plaît, Udo, ne fais pas ta mauvaise tête et va rejoindre tes copains d’ACCEPT qui ont du prendre un autre gars à ta place (on dirait ANTHRAX !!). A bien y réfléchir, je crois que certaines reformations ont du bon. En tous cas, elles permettent d’éviter le pire …
(*) ce n’est pas de le provoc’, votre serviteur en est … on a tous nos faiblesses …
Ajouté : Mercredi 16 Septembre 2009 Chroniqueur : NicoTheSpur Score : Lien en relation: U.D.O. Website Hits: 9551
|