# 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
}
OVERLAND (uk) - Epic (2014)

Label : Escape Music Ltd
Sortie du Scud : 21 février 2014
Pays : Angleterre
Genre : Hard FM
Type : Album
Playtime : 12 Titres - 53 Mins
On ne va pas se le cacher, Steve Overland bénéficie dans nos contrées d'une notoriété quasi-inexistante. Alors le temps est venu de réparer une certaine injustice, d'autant que ce chanteur britannique commence à avoir une sacrée carrière derrière lui. S'il a fait ses armes au sein de WILDLIFE qu'il a fondé avec son frangin de guitariste (prénommé Chris), c'est surtout au sein du combo FM que vous avez éventuellement entendu parler de lui. Ce quintet (toujours avec Chris), officiant dans le plus pur registre AOR (pour "Album-Oriented Rock") a publié 5 albums de 1986 à 1995, avant de s'éteindre puis de remettre le couvert récemment (retour en 2010 avec l'opus Metropolis). Entretemps, Steve a eu le temps de s'éclater au sein de THE LADDER (avec Vinny Burns, guitariste de TEN), SHADOWMAN, et bien sûr de son propre groupe sobrement baptisé OVERLAND. Voilà pour la piqure de rappel.
Comme son nom ne l'indique pas, Epic ne lorgne absolument pas du côté du Metal épique, mais donne dans le Hard/Rock FM de haute qualité. Et pour cause, comme à son habitude, Steve Overland a sollicité des pointures en la matière. Les guitaristes/songwriters nordiques Anders Rydholm (sur Break Away en 2007) et Tor Talle (sur Diamond Dealer en 2009) l'avaient épaulé auparavant. Sur Epic, Mike Slamer (CITY BOY, STREETS, SEVENTH KEY) joue les multi-instrumentistes (guitares, basse, clavier), Christian Wolff (PHENOMENA, MECCA, musicien de Rob Moratti) se charge des lead guitares pour notre plus grand bonheur, Larry Antonino (basse) et Jay Schellen (batterie) se chargent de la section rythmique, tandis que Billy Greer (bassiste de KANSAS) assure les chœurs aux côtés de Billy Trudel. Bref, du beau monde.
Ce qui différencie Epic du reste de la production actuelle dans le genre, c'est la voix atypique de Steve Overland. Le bonhomme n'a déjà pas du tout la voix de son physique (on ne lui imagine pas cette tête là ...) et son timbre le distingue aisément de la plupart des chanteurs FM. On ne dira pas que Steve chante avec son nez, auquel cas on qualifierait sa voix de "nasillarde". Mais les similitudes avec certains frontmen de TOTO comme Bobby Kimball ou Joseph Williams sont flagrantes, en particulier sur "If Your Heart's Not In It". En poussant le bouchon encore plus loin, et l'omniprésence de ces claviers n'y est pas étrangère, il n'est pas rare de penser à une version électrisée de notre GOLD national (!!!) avec Emil Wandelmer au micro...
Raccourcis faciles, ces rapprochements classeraient OVERLAND dans un registre plus "Rock" que "Hard", on vous l'accorde. Pour preuves, ces titres à l'accroche indéniable qui puisent sans complexe dans les 80's, comme l'entrainant "Radio Radio", le final "Time For Letting Go", ou cette ballade nommée "Liberate My Heart" que n'aurait pas renié Stan Bush (le solo très bluesy de Christian Wolff servirait de cas d'école !). Reste qu'en parallèle, Epic fourmille de sacrés riffs qui dépotent sévère (ça groove sur "Rags To Riches", ça swingue sur ce "Rock Me" et son orgue Hammond qui donnent envie de danser, ça envoie sur un "So This Is Love" à rendre Dennis Ward fou de jalousie). Et quoiqu'on en dise, Epic regorge de hits aux mélodies imparables avec refrains et chœurs du tonnerre, "Stranded" et "If Loods Could Kill" (à classer dans les meilleures chansons de ces 10 dernières années) arrivant largement en tête. Avec un tel pedigree, on se demande pourquoi OVERLAND n'est pas signé chez Frontiers...
On sera bien incapable de dire si cet album vieillira bien ou pas, mais à l'heure où le chaud soleil repointe le bout de ses rayons, voilà l'album idéal à écouter dans sa décapotable.
Ajouté : Vendredi 09 Mai 2014 Chroniqueur : NicoTheSpur Score :     Lien en relation: Overland Website Hits: 11608
|