# 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
}
PHARAO (de) - Road To Nowhere (2010)

Label : SAOL (Service for Artist Owned Labels) / H'Art
Sortie du Scud : 8 octobre 2010
Pays : Allemagne
Genre : Heavy / Power Metal
Type : Album
Playtime : 12 Titres - 47 Mins
N'ayons pas peur des mots, PHARAO est un second couteau. Pourtant, l'histoire de ces Allemands est belle. Elle aurait même pu être merveilleuse si la vie ne s'en était pas autant mêlée. Le destin a voulu que le projet soit tellement ancien qu'il aura connu les deux républiques d'Allemagne. Fondé en RDA, PHARAO s'échappe alors pour sortir son premier album en 1990 (Bad Boys From East) du côté de la RFA. Le buzz est imminent, sauf que contre toute attente, le trio de l'époque se sépare en 1991 pour revenir épisodiquement entre 1997 et 2001, le temps d'un EP, avant de constater qu'il faudra que le temps fasse son œuvre. Officiellement re-reformé en 2003 autour de son emblématique leader Jacky Lee Man, PHARAO traversera encore sept années de turbulences avant de trouver la bonne formule et de sortir son second opus, Road To Nowhere, en octobre 2010. Vous avez tout suivi ? Bien. Vous aurez une médaille.
En ce qui concerne donc ce "grand retour" (passé un peu inaperçu, il est vrai), j'ai l'intime conviction qu'il justifie à lui seul l'expression "second couteau" employée plus haut. Dans l'ombre du patrimoine Heavy Metal allemand (ACCEPT, SINNER, RUNNING WILD, GAMMA RAY, BLIND GUARDIAN, RAGE, j'en oublie) et désormais plus héritier que testateur, PHARAO va enguirlander son second album d'un accoutrement de strass et de paillettes pour cacher la misère. Ainsi, Biff Byford et Paul Quinn (SAXON), Tom Angelripper (SODOM) et Mario Le Mole (MIND ODYSSEY) viendront jouer le rôle des invités prestigieux, peut-être afin de faire croire que tout le monde se battrait pour avoir une chance de jouer à leurs côtés. Mais c'est définitivement raté. Témoin et symbole de ce monumental gâchis, "Before The Storm", qui exploite de façon hallucinante de médiocrité le timbre singulier d'Angelripper, coupable d'une minable apparition-éclair juste après l'intro. Je peux comprendre que toute la lumière devait se porter sur PHARAO et son comeback, mais à quoi bon donner si peu d'espace à des musiciens confirmés qui auraient pu faire de Road To Nowhere un autre album ? Pour le coup, je ne pige pas vraiment les intentions musicales du quatuor, qui en plus de ça, s'embourbe dans un Heavy Metal virant parfois au Power sans charme ("Mother Earth", "I Believe"). Toute la sensibilité inhérente au style s'éclipse au profit des vocalises de Jacky Lee Man et des riffs appauvris de T.R Yorg. Pire encore, ce Metal mélodique et un peu naïf fait une profonde descente au cœur du kitsch, comme le laissait déjà envisager la pochette de cet album, qui réutilise ce masque de pharaon déjà représenté vingt ans plus tôt sur Bad Boys From East. Le temps semble s'être arrêté avec eux et seule la production a suivi les évolutions technologiques, pour un rendu propre et soft. Je ne peux pas dire que je suis déçu car je n'attendais rien de particulier de ce disque, mais je m'étonne quand même de la relative faiblesse de ces compositions, dans leurs structures, leurs arrangements, surtout quand elles sont écrites par des vétérans.
Trois ans après sa sortie, Road To Nowhere demeure un album de Heavy Metal traditionnel qui a loupé son train. Mais qui sait ? Peut-être qu'après avoir fui le régime tyrannique d'Angela Merkel pour trouver son bonheur chez le bienveillant Kim Jong-Un, après avoir changé dix sept fois de line-up et s'être reformé huit fois, après avoir proposé à Lemmy, Rob Halford et Lady Gaga de chanter vingt secondes chacun sur son prochain opus, PHARAO trouvera la place qu'il mérite ? Réponse dans vingt ans.
Ajouté : Mardi 22 Avril 2014 Chroniqueur : Stef. Score :    Lien en relation: Pharao Website Hits: 9480
|