# 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
}
BOB CATLEY (uk) - Immortal (2008)

Label : Frontiers Records / Nocturne
Sortie du Scud : 19 septembre 2008
Pays : Angleterre
Genre : Hard Rock mélodique
Type : Album
Playtime : 12 Titres - 61 Mins
Bob Catley a toujours su profiter de ses infidélités à MAGNUM pour travailler avec un tas de compositeurs différents. Ainsi, The Tower (1998), Legends (1999) et Middle Earth (2001) ont été entièrement écrits par le chanteur de TEN, Gary Hughes, grand fan de MAGNUM devant l'éternel. C'est aussi le clavier de TEN, Paul Hodson, qui s'est chargé de la composition de When Empire Burns. Pour Immortal, Frontiers a chargé son poulain préféré, le guitariste Magnus Karlsson, d'écrire12 titres pour Catley, et confié les manettes à Dennis Ward. C'est ce qui s'appelle mettre les meilleurs atouts de son côté. Encore que le Love's Dying Wish de STARBREAKER (autre projet de Karlsson) m'avait laissé sur ma faim, d'où une certaine appréhension.
Après une heure d'écoute et d'immersion totale, je qualifierais Immortal en un mot : la classe. Bob Catley, c'est la classe. Peu importe si il n'écrit pas ses propres chansons, ça laisse le soin à d'autres de révéler leurs talents. Et puis un mec comme Johnny a fait ça durant toute sa carrière (Ndr : j'aime bien citer Johnny, j'ai remarqué que ça en faisait ricaner certains ... que les jeunes loups fassent la même carrière et on reparle ... soyez ouverts d'esprit ... si, si, vous en êtes capables), alors ?
D'autant que la compo n'est pas confiée à n'importe qui. Ce qui me surprend plus, c'est que Karlsson ne joue presque pas de gratte sur l'album. Là aussi mes inquiétudes sont bien vite dissipées, dans la mesure où Dennis Ward et Uwe Reitenuer assurent comme des bêtes à la six-cordes. J'ai oublié de vous dire que c'est Dirk Bruinenberg (ELEGY) qui martèle les fûts. En gros, Catley (Frontiers ?) a réuni autour de lui ce qui se fait de mieux pour produire un Hard Rock classieux de qualité.
Immortal est un disque, que dis-je LE disque qui va vous réconcilier avec les années 80. Non, les années 80 ne furent pas que synonymes de claviers affreux et de tubes merdiques. Les années 80, c'est aussi "Light Up My Way", dans le même esprit que ce qu'avait pondu Stan Bush pour les films de Van Damme : classique mais efficace. C'est la décennie où le RAINBOW de Blackmore a plongé (je n'ai pas dit "sombré") dans le Hard FM avec Graham Bonnet ou Joe Lynn Turner ... Et "End Of The World" provient directement de ce RAINBOW là. Notons que Karlsson signe sur ce titre son unique solo de l'album, et il s'agit d'un des moments forts de l'album.
Malgré tout, Karlsson fait en sorte de ne pas cloitrer Immortal dans un seul contexte musical, et l'agrémente par ci par là de références majeures. "One More Night" présente bien des similitudes avec le Heavy Metal finlandais (STRATOVARIUS ou THUNDERSTONE), ceci étant dû au duo guitares / claviers que n'aurait pas renié non plus Malmsteen sur Odyssey. Vous avez remarqué qu'on vient de citer en quelques phrases les noms de Blackmore, Malmsteen et accessoirement Tolkki, trois guitaristes musicalement liés ? Ces trois là ont puisé leur inspiration dans les racines du Metal dur pour accoucher de chefs d'oeuvre infiniment plus mélodiques. Ils ont en permanence su jongler entre rythmes de plomb et refrains FM. Et c'est exactement la méthode qu'adopte Magnus Karlsson pour Bob Catley. Le tout, je dois dire, avec un certain talent.
Du coup, le super groupe balance hits sur hits, du single évident "You Are My Star" (avec ses rythmiques étouffées et son refrain mélodiquement parfait) au désespéré (mais toujours accrocheur) "War In Heaven", en passant par le mid-tempo "The Searcher" digne de MEAT LOAF et un "Open Your Eyes" qui durcit un peu le ton. Ce qui un plus peut paraître un poil trop accessible et donc vite lassant, parvient malgré tout à captiver du début à la fin.
Un dernier mot enfin sur Catley, car après tout c'est de son album dont on parle quand même. N'étant pas un fin connaisseur du style pratiqué par MAGNUM, je ne saurais vous dire si Catley sort des sentiers battus ou nous fait du MAGNUM-bis. Mais le garçon chante bien, a une voix assez unique et identifiable. Et sa réputation me semble justifiée. D'autant qu'avec un album comme celui là, Bob Catley ne risque pas de décevoir ses fans.
Ajouté : Vendredi 03 Octobre 2008 Chroniqueur : NicoTheSpur Score :      Lien en relation: Bob Catley Website Hits: 15655
|