# 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
}
RADIOACTIVE (se) - Taken (2005)

Label : MTM / Musea
Sortie du Scud : 11 novembre 2005
Pays : Suède
Genre : Rock mélodique
Type : Album
Playtime : 13 Titres - 51 Mins
Tommy Denander a l’habitude de s’entourer de stars du Rock, et ce nouvel essai ne déroge pas à la règle. Cela va de Neal Schon (JOURNEY) à Yngwie Malmsteen, de Bruce Kulick (KISS) à Steve Lukather (TOTO) en passant par James Christian (HOUSE OF LORDS). La liste complète des invités est reproduite ci-après.
Une fois encore, Denander nous livre des compositions d’une extrême maturité, bénéficiant d’arrangements parfaitement soignés et d’une propreté d’interprétation qui - on s’en serait douté - ne souffre aucune critique.
Bien que l’album ait une très forte teinte AOR, il est terriblement varié car, entre les morceaux énergiques comme “Shattered” avec le solo de Malmsteen, et la ballade “This I Promise You”, il y a tout un univers que Denander explore et nous offre. Notamment le duo entre James Christian et sa femme, Robin Beck, est très riche.
Cette variété est encore accrue par le fait que les interprètes changent à chaque titre. L’album y perd légèrement en cohérence et se positionne davantage comme une sorte de compil’ de Rock FM. Par ailleurs il faut signaler qu’en dépit d’une qualité irréprochable, ces morceaux ne sont pas tapageurs et il faudra insister un peu avant de les avoir en tête. C’est quelques petits défauts ne doivent pas dissuader les amateurs de Rock mélodique qui trouveront largement de quoi satisfaire leur appétit.
Paylist + line up : 1. C.O.W Tommy Denander - Guitars & keyboards
2. Taken
Bobby Kimball - Lead vocals
Tommy Denander - Guitars, keyboards & bass
Vinny Heter - Drums
Thomas Vikström - Backing vocals
3. Stronger Than Yesterday
Andreas Carlsson - Lead & backing vocals Tommy Denander - Guitars, piano & bass Jeff Porcaro - Drums Dean Parks - Guitars Steve Porcaro - Keyboards, strings & effects Greg Phillinganes - Keyboard fills
4. Hit Her Where It Hurts Gary Barden - Lead vocals Tommy Denander - Guitars, keyboards & bass Vinny Heter - Drums Michael Voss - backing vocals
5. Easy's Getting Harder Robin Beck - Lead vocals James Christian - Lead vocals Tommy Denander - Guitars & keyboards Al V Dohn - Bass Vinny Heter - Drums Thomas Vikström - Backing vocals
6. This I Promise You Mikael Erlandsson - Lead & backing vocals Tommy Denander - Guitars, keyboards & loops Al V Dohn - Bass Vinny Heter - Drums
7. Forgivness Christian Ingebrigtsen - Lead vocals Tommy Denander - Guitars, keyboards & bass Bruce Gaitsch - Acoustic guitars Vinny Heter - Drums Thomas Vikström - backing vocals
8. Shattered Philip Bardowell - Lead & backing vocals Tommy Denander - Guitars, keyboards & bass Yngwie Malmsteen - solo Vinny Heter - Drum
9. Premonition Fergie Frederiksen - Lead vocals Thomas Vikström - Lead & backing vocals Tommy Denander - Guitars, keyboards & bass Bruce Kulick - Guitar solo Vinny Heter - Drums
10. Carry On Kelly Keagy - Lead vocals Tommy Denander - Guitars & keyboards John "jr" Robinson - Drums Abe Laboriel - Bass Tom Keane - Keyboards Neal Schon - Talk box intro Michael Landau - Guitars Michael Thompson - Guitars Frederic Slama - Guitars Steve George - Backing vocals
11. Love Is On Your Mind Thomas Vikström - Lead & backing vocals Tommy Denander - Guitars & keyboards Al V Dohn - Bass Vinny Heter - Drums
12. Sinner Johan Fahlberg - Lead vocals Tommy Denander - Guitars & keyboards Al V Dohn - Bass Vinny Heter - Drums Thomas Vikström - Backing vocals
13. Never Gonna Let Her Go Tommy Denander - Rhythm & lead guitars Steve Lukather - Solos (3:09 - 3:33 & end solo) Michael Landau - Rhythm guitars Peter Friestedt - Guitar fills Vinnie Colaiuta - Drums David Diggs - Keyboards Hussain Jiffry - Bass Tom Saviano - Sax
Ajouté : Jeudi 08 Décembre 2005 Chroniqueur : Alexis de Fireball Score :     Hits: 14027
|