# 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
}
EDGUY (de) - Space Police - Defenders Of The Crown (2014)
Label : Nuclear Blast
Sortie du Scud : 18 avril 2014
Pays : Allemagne
Genre : Hard Metal mélodique
Type : Album
Playtime : 11 Titres - 65 Mins
Force est de constater que depuis Age Of The Joker, EDGUY retrouve une certaine patate. Certes, nos joyeux lurons allemands n'ont pas encore ravivé la flamme métallique de Hellfire Club, même si l'énergique et Heavy titre d'ouverture "Sabre & Torch" ramène tout droit à "Mysteria", mais pour une fois, on admettra que Tobias Sammet a de bonnes raisons de s'enflammer !
En dépit d'une pochette à classer dans le Top 10 des illustrations les plus décalées (pour ne pas prononcer l'adjectif "laides"), Space Police – Defenders Of The Crown constitue une vraie bonne surprise et se rapproche d'un Rocket Ride pour sa diversité et son audace bienvenues. Le final "The Eternal Wayfarer" et ses plus de 8 minutes représentent rien de moins que le morceau épique qu'on attend de la part d'AVANTASIA depuis une décennie : entre ces claviers qui ont un je-ne-sais-quoi de SABATON, son break oriental et son refrain bourré de chœurs monstrueux, cette baffe là vient conclure un album qu'on qualifiera de franchement réussi.
Disons qu'après un Mystery Of Time d'AVANTASIA en demi-teinte, il fallait bien que Tobi se rattrape, aidé en cela par son guitariste soliste Jens Ludwig qui signe ici deux titres. Le bougre ne s'est d'ailleurs jamais autant défoncé sur sa six-cordes, au gré de soli d'enfer ("Love Tyger", "The Realms Of Baba Yaga", "Do Me Like A Caveman"). Mais c'est tout EDGUY qui s'éclate, et le titre de "groupe Metal le plus fun" n'a rien d'usurpé, jouant toujours sur ce côté rigolard qui contraste avec l'ego risible de son leader. Un "Love Tyger", au riff typé Hard Rock et à l'essence même du tube en puissance, illustre bien la machine EDGUY version 2014 : du Metal puissant, sans prétention, mélodique, et au refrain "t-t-très" accrocheur.
Et puis Sammet a retrouvé une certaine forme d'inspiration, pas de façon régulière, mais certains détails font mouche : le gros son et le clavier de "Space Police" (façon "King Of Fools") ; le retour des hymnes accélérés à l'ancienne (Felix Bonhke est un tueur à la batterie) comme "Defenders Of The Crown" (où Tobi assure grave sur le "here we go", c'est un vrai plaisir), ou "Shadow Eaters" (bonne mélodie agrémentée d'un passage très spatial avec piano et synthés) ; et bien sûr, les riffs qui assassinent tout (écoutez "The Realms Of Baba Yaga", on note un groove très GUNS ou SKID ROW par instants).
On note qu'EDGUY a particulièrement soigné ses refrains (point d'orgue de la superbe "Do Me Like A Caveman", aérienne mais rapide, menée par le piano de "Lost In Space") et évité le pilote automatique qui avait envoyé Tinnitus Sanctus au plus profond de la médiocrité. Même la ballade "Alone In Myself", où le chanteur teuton enfile le costume de Tobias "The Boss" Sammsteen, enchantera les plus réfractaires, séduits par l'orgue Hammond et les chœurs pleins de "houhouuu" qui n'auraient pas fait tache lors d'un "The Story Ain't Over".
Si l'on excepte cette énorme faute de goût qu'est la reprise de FALCO, "Rock Me Amadeus", qui n'avait rien à faire là, EDGUY signe son retour avec un Space Police – Defenders Of The Crown qu'on n'attendait pas à ce niveau, et qui fout K.O. au bout de 27 minutes de titres en forme d'uppercuts. Personnellement, j'ai encore du mal à m'en remettre.
Ajouté : Vendredi 09 Mai 2014 Chroniqueur : NicoTheSpur Score : Lien en relation: Edguy Website Hits: 10712
|