# 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
}
HELLOWEEN (de) - Straight Out Of Hell (2013)
Label : Steamhammer
Sortie du Scud : 22 janvier 2013
Pays : Allemagne
Genre : Power Metal mélodique
Type : Album
Playtime : 14 Titres - 65 Mins
Vous vous souvenez la pochette de Rabbit Don’t Come Easy, album d’HELLOWEEN paru en 2003 ? On y voyait la main d’un magicien sortant de son chapeau un lapin, ce fameux tour de magie qui illumine toujours les yeux des petits et grands. On se demande toujours « mais que va-t-il nous sortir de son grand chapeau, David Copperfield ? ». Et hop, un lapin !
Ben voilà, avec HELLOWEEN, c’est la même chose : à la parution de chaque nouveau disque, on appréhende avec angoisse le contenu. Le combo germanique a tellement marqué les esprits dans les années 80 grâce à ses Keepers Of The Seven Keys, que la pression existe toujours aujourd’hui lorsque Michael Weikath et compagnie s’attaquent à un nouveau brûlot. Alors quelle surprise nous réserve la Citrouille avec Straight Out Of Hell ? Bonne ou mauvaise ? Sans plus attendre, je vous l’annonce : Straight Out Of Hell constitue une excellente surprise.
Excellente, parce qu’après les semi-échecs nommés Keeper Of The Seven Keys – The Legacy, Gambling With The Devil et enfin 7 Sinners, on n’attendait plus HELLOWEEN à un tel niveau. Entendre nos cinq compères reprendre à STRATOVARIUS ce qui lui appartient avec « Far From The Stars » mettra tout le monde d’accord : en matière de Power Metal mélodique, entre refrain à reprendre en chœur, un super duel de soli, un Dani Löble (batterie) déchaîné, on n’a rarement fait aussi bien dans le genre depuis une décennie !
Pourtant, on ne peut pas dire que tout commence pour le mieux : le titre d’ouverture, composé par le chanteur Andi Deris et curieusement choisi comme premier single (en version « edit »), se nomme « Nabatea » et ne tient pas trop la route par rapport à ses petits frères. En dépit de 7 minutes de Power oriental, accéléré en temps voulus, bénéficiant d’une accalmie bien malvenue en début d’album, ce progressif « Nabatea » aurait eu une place légitime au milieu de Straight Out Of Hell. Curieux choix, donc …
Heureusement, la suite met dans le mille. « Live Now ! » (toujours signé Deris) joue sur les contretemps et conserve cet entrain propre au Happy Metal si cher à HELLOWEEN. « Waiting For The Thunder » a des allures de réel single avec ses petites touches de piano (une habitude depuis le « If I Could Fly » sur The Dark Ride) pour un rendu que n’aurait pas renié le SHAAMAN de la belle époque. Le guitariste Sascha Gerstner, présent dans le groupe depuis 2002 quand même, apporte sa pierre à l’édifice : le traditionnel « World Of War » alterne couplets à l’ambiance martiale et refrain fédérateur, tandis que « Asshole » permet à HELLOWEEN de sortir des sentiers battus avec ses passages Pop et quelques touches avant-gardistes. Andi Deris – encore lui – rend même hommage à QUEEN et Freddie Mercury en calquant le tribal « Wanna Be God » sur le « We Will Rock You » de la Reine. Le pire, c’est que le clin d’œil est tellement voyant qu’il en devient amusant et efficace.
Les dinosaures Michael Weikath et Markus Grosskopf, eux, entretiennent à leur manière l’héritage HELLOWEEN, avec respectivement « Burning Sun » (ah ! ce cocktail de couplets insupportables et de mélodies imparables) et « Years » (vraiment moyen et 1000 fois entendu) pour l’un, et le titre éponyme pour l’autre (un bon Speed Metal prétexte à un déluge de soli dans tous les sens). Rien de bien nouveau mais au moins, le fan ne naviguera pas en eaux troubles !
Si la ballade – passage obligatoire – ne restera pas dans les annales, reste que « Hold Me In Your Arms » fait office de pause bien amenée, et permet de souffler un peu. Car ce HELLOWEEN cru 2013 arrache tout sur son passage. Y compris ce dernier morceau, « Church Breaks Down », qui commence par une intro religieuse, avec orgue et voix célestes, envoie de se métamorphoser en HELLOWEEN pur souche, avec un refrain similaire à celui de « Mr Ego / Take Me Down » (sur Master Of The Rings).
On n’omettra pas de dire que les albums d’HELLOWEEN ayant tendance à mal vieillir (exemple flagrant : Better Than Raw), Straight Out Of Hell doit être pris comme le sursaut d’orgueil d’un groupe qu’on enterrait trop vite (Monsieur Hansen, vous pouvez prendre exemple). Andi Deris est au top de sa forme, les gratteux s’en donnent à cœur joie, la section rythmique aussi. Michael Weikath a beau voir cet opus – magnifiquement produit par Charlie Bauerfeind – comme le prolongement logique de 7 Sinners, force est de reconnaître que la Citrouille s’est surpassée. Vous pouvez d’ores et déjà réserver à ce disque une place entre Master Of The Rings, Time Of The Oath et The Dark Ride.
A noter que la version limitée propose une version « orgue Hammond » du titre « Burning Sun », en hommage au regretté Jon Lord (pour rappel, claviériste de DEEP PURPLE, disparu il y a peu).
Ajouté : Mercredi 23 Janvier 2013 Chroniqueur : NicoTheSpur Score : Lien en relation: Helloween Website Hits: 10892
|