# 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
}
WIZARD (de) - Thor (2009)

Label : Massacre Records / Season Of Mist
Sortie du Scud : 30 janvier 2009
Pays : Allemagne
Genre : Power Metal
Type : Album
Playtime : 10 Titres - 49 Mins
Il n'y a pas plus fervent défenseur du Heavy Metal que votre serviteur. Il écoute PRIMAL FEAR aussi régulièrement que possible, il s'agenouille devant le Metal God himself et le PRIEST au Zénith, il scande "Hearts On Fire" d'HAMMERFALL en dressant le poing, il défend corps et âme le Warriors Of The World de MANOWAR et prend en affection toute personne dévouée au Metal lourd (message personnel : Blaze, je t'aime). Certes, certains combos l'irritent quand même, à l'instar d'un METALIUM chez qui l'originalité est une rare vertu, mais il (aaaah ! que c'est bon de parler de soi à la troisième personne) l'aime, ce Heavy Metal chéri. Quitte à passer pour un gros ringard ou un mec qui vient d'une autre décennie, voire d'un autre siècle.
Tiens, ça me rappelle cette question de Joey DeMaio posée à un journaliste : « es-tu prêt à mourir pour le Metal ? Moi, je le suis ». Les mecs de WIZARD doivent être un peu dans ce trip’ là. On qualifie d'ailleurs WIZARD de « réponse européenne à MANOWAR ». Sûr qu'en baptisant son huitième album Thor, on s'immerge avec certitude dans le "True Power Speed Metal" (c'est ainsi que WIZARD était catalogué par son ancien label, Limb Music). En d'autres termes, disons que Thor et ses 11 titres s'adresse aux fans de Power Metal au gros son (Quel son, putain !).
L’affiliation avec MANOWAR paraît évidente par instants (le tonitruant « The Visitor » et son refrain qui fait mouche), au point de se demander si ce n’est pas Fighting The World qui tourne sur la platine. Et puis entendre successivement les mots « fire » et « steel » dans une chanson prête finalement à sourire (le très speed « What Would You Do ») … Heureusement que Joey ne s’appelle pas Gene Simmons et qu’il n’a pas les droits sur le Dictionnaire des Guerriers Immortels, sinon WIZARD se retrouverait déjà à la barre pour plagiat.
Maintenant, trêve de plaisanterie, limiter le répertoire de WIZARD à un honteux remake de l’Homme de la Guerre, voilà qui serait bien réducteur. En bon groupe de Power, WIZARD emprunte à ICED EARTH ses rythmiques acérées (« Midgard’s Guardian »), à HAMMERFALL ses chœurs fraternels (« Pounding In The Night »), et parvient à pondre quelques morceaux ultimes qui donnent envie soit de secouer la tête (« Utgard, The Beginning » et ses chants guerriers), soit de s’époumoner à n’en plus finir (« Stolen Hammer »).
WIZARD, c’est le Power sous sa forme la plus agressive (« Resurrection »), aidé en cela par le chant si particulier de Sven D’Anna. Le bonhomme aime à chanter dans des tons graves sur les couplets et à s’arracher les cordes vocales (et nos oreilles) par la suite. Original certes, mais irritant à la longue. Le meilleur exemple se nommant « Lightning ». Ajoutons à cela quelques duels de six-cordes entre Dano Boland et Michael Maass (qui fait son grand retour depuis le Odin de 2003), plutôt bienvenus bien que très conventionnels.
Reste que l’ensemble manque souvent d’étincelle, de génie, de constance, malgré une facette épique honorable et parfois prenante. Oui, y a le gros son, ça ne fait aucun doute. Mais ça ne fait pas tout. Loin de la médiocrité de METALIUM, tout se situant à des années lumière d’un Jaws Of Death (PRIMAL FEAR) ou d’un Crimson Thunder, WIZARD signe un opus respectable, qui s’écoute une fois et se range dans le placard. Un peu comme un disque de CAGE ou CRYSTAL EYES.
Alors pour répondre à Joey, je ne sais pas si je suis prêt à mourir pour le Heavy Metal, mais j’aimerais qu’il me survive. Et voilà un album, Thor, qui, s’il n’enterre pas le style, le cloisonne encore un peu plus, agrémentant la longue liste des skeuds qui n’apportent rien de frais, à part une certaine lassitude…
Ajouté : Samedi 25 Avril 2009 Chroniqueur : NicoTheSpur Score :    Lien en relation: Wizard Website Hits: 8219
|