# 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
}
HALFORD (uk) - Halford IV - Made Of Metal (2010)

Label : Metal God Records
Sortie du Scud : 27 septembre 2010
Pays : Angleterre
Genre : Heavy Metal
Type : Album
Playtime : 14 Titres - 62 Mins
Celui-là, on ne l'attendait plus, mais alors plus du tout. Les rumeurs de fin de carrière se font de plus en plus persistantes au sujet de JUDAS PRIEST, on prétend ici et là que le combo de Birmigham entamerait bientôt sa tournée d'adieu. Ajoutez à cela que la dernière offrande du père Halford en solo, Winter Songs, avait laissé un goût amer ... Le doute était permis. Le monde du Metal allait devoir faire sans le Metal God, et sans le PRIEST. Dur à avaler.
Et puis, comme par miracle, Rob remet le couvert avec Made Of Metal. Que JUDAS PRIEST baisse le rideau définitivement ou pas, il reste aujourd'hui une certitude : HALFORD, le groupe, ne compte pas s'arrêter en si bon chemin. Certes, Made Of Metal n'a pas la fraicheur d'un Resurrection, l'agressivité d'un Painkiller, l'audace d'un Nostradamus. Mais il sonne comme un cri du coeur, une envie de hurler que le Metal God n'est pas mort. Pour la première fois depuis des lustres, Halford se veut sincère quant à l'évolution de sa voix et des possibilités moins étendues que par le passé. A plus d'une reprise, dans ce Made Of Metal, certaines carences apparaissent criantes. Mais qu'il est bon de réaliser que malgré son âge, la passion du divin chauve demeure intacte.
A nouveau bien entouré, il a continué à confier à Roy Z la production, le fameux Brésilien tenant aussi la six-cordes sur l'album, au même titre que le fidèle Mike Chlasciak. De même, Bobby Jarzombek (ex-RIOT) est toujours présent aux fûts et c'est Mike Davis qui complète à la basse la section rythmique. Mine de rien, ce line-up fonctionne et dans le bon sens. Au regard des crédits des chansons composées pour Made Of Metal, on constate qu'Halford a été prolifique, fertile en bonnes idées, et ce en solo la plupart du temps. Preuve que le Metal God se sent vraiment en confiance lorsqu'il évolue aux côtés de ces gars-là. Et vice-versa, le duo de gratteux se baladent comme deux poissons dans l'eau. Pour n'importe quel fou de Heavy Metal, le contrat est quasiment rempli.
Et histoire de convaincre les plus sceptiques, Made Of Metal commence fort, très fort : "Undisputed", "Fire And Ice" et "Speed Of Sound" font office de titres bien rendre-dedans, menés tambour battant avec pour points culminants des refrains accrocheurs et des soli prévisibles mais efficaces. Si le titre éponyme, "Made Of Metal", donne une voix plus robotique au Metal God, l'originalité s'arrête là car il s'agit sûrement du morceau le moins excitant, à l'image d'un "Hell Razor" également dispensable. En fait, il est difficile de faire mieux que "Like There"s No Tomorrow", émotionnellement très fort, un peu à l'image des "Temptation" et "Slow Down" sur Resurrection, où la voix de Rob fait des merveilles et vous hisse au Septième Ciel du Metal. Un grand morceau, un grand chanteur, un grand moment.
La ballade très personnelle, "Twenty-Five Years", sûrement écrite dans la même optique émotionnelle, n'a pas l'effet espéré. Bien que le Metal God y aborde un sujet qui lui tient à coeur, le fait d'être sobre depuis 25 ans, seules les paroles peuvent toucher l'auditeur, la musique ne procurant pas autant de frisson qu'un "Silent Screams" qui reste un must. Made Of Metal dévoile d'ailleurs un Halford qui lutte toujours avec ses démons, car après l'alcool, c'est la peur de la mort qui prime sur "Till The Day I Die". Une intro folk un peu déprimante met tout de suite dans l'ambiance, avant que le quintet ne nous offre un Metal aux tendances Blues voire sudistes réussi. Qui joue de la slide guitar comme ça ? Roy Z ? Mike Chalsciak ? En tous cas, c'est un vrai régal.
Le Metal God aime mettre en avant ses musiciens, la preuve aussi avec "Matador". Bien que très téléphoné et doté d'une guitare qui soutient bien inutilement son chanteur, "Matador" sert surtout de défouloir pour Roy Z et Chlasciak dans un domaine plus oriental. Alors le mot "téléphoné" étant un peu dur, on lui préfèrera le terme de "traditionnel" quand on évoque les "Heartless", "I Know We Stand A Chance" et autres "We Own The Night". Le résultat est moins percutant que le début de l'album, et il faut voir le morceau final, "The Mower", digne de Crucible, comme le dernier assault Power/Thrash d'un Made Of Metal assez complet.
Si, ces derniers mois, votre serviteur a émis des doutes sur la capacité de Rob Halford à rester dans la course, Made Of Metal remet les pendules à l'heure. C'est déjà une excellente nouvelle.
Ajouté : Lundi 07 Mars 2011 Chroniqueur : NicoTheSpur Score :     Lien en relation: Halford Website Hits: 11148
|