# 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
}
SIGNUM REGIS (sl-se-cz) - Signum Regis (2008)

Label : Locomotive Records / Underclass
Sortie du Scud : 29 août 2008
Pays : Slovaquie / Suède / République Tchèque
Genre : Power mélodique
Type : Album
Playtime : 11 Titres - 50 Mins
SIGNUM REGIS est un groupe d’origine slovaque fondé par le bassiste Ronnie König en 2007. Au moment de sortir leur premier opus, König et ses quatre autres comparses ont réussi un joli coup : embaucher le célèbre frontman Göran Edman, connu pour avoir officié sur deux albums de Zigwigwie Malmsteen (Eclipse en 1990 et Fire And Ice en 1992) mais qui peut aussi se vanter d’avoir fait de sa carrière une gigantesque partouze, dans laquelle on retrouve BRAZEN ABBOT, Nikolo Kotzev, TIME REQUIEM, STREET TALK, Richard Andersson, John Norum, TALISMAN ou encore LIONS SHARE. Et finalement je me demande où est vraiment l’exploit de dégoter un chanteur qui bouffe à tous les râteliers, mais bon on va mettre ça sur le compte d’une passion jamais rassasiée.
D’autant que si on observe bien les crédits de Signum Regis, tout paraît plus clair : le père Edman a enregistré ses parties vocales chez lui, au chaud, bien loin du local de répèt’ de SIGNUM REGIS. Entre parenthèse voici venu mon coup de gueule de la semaine : quel plaisir peuvent bien éprouver ces musiciens à « travailler ensemble » à base de fichiers MP3 transmis par courrier électronique ? Ne se rencontrent-ils donc jamais ? Comment se créé l’osmose ? Alors ça donne des trucs du genre : « oui Goran a accompli un travail fantastique sur notre album, les bandes qu’il m’a envoyées étaient tout simplement é-pou-stou-flantes !!! ». Ah OK, et sinon il est sympa Goran ? Imaginez la réponse : « ah ben sûrement mais je ne l’ai jamais vu, en revanche hier on a bien déconné sur Facebook, quel pied !!! ». Bon reprocher ça juste à SIGNUM REGIS serait difficile dans la mesure où 90% des groupes procèdent comme ça aujourd’hui, et putain c’est bien triste … Il faut croire que seul IRON MAIDEN continue encore et encore à répéter et à tout enregistrer live …
Si l’on fait abstraction de ce détail, prenons le taureau par les cornes et intéressons-nous à ce premier album et sa pochette classieuse. Le titre d’ouverture, « Fields Of Star », fait carrément illusion : superbe refrain limite Hard FM, chœurs appropriés, on touche la perfection et d’entrée on croit tenir entre ses mains un petit bijou. Et puis soudain, poum ! Le choc ! « All Over The World », le titre qui lui succède, donne dans le Speed Metal plutôt mélodique. L’enchaînement est brutal, et en plus SIGNUM REGIS balance un solo de clavier affligeant qui fait « pouic pouic » et déglingue tout …
On réalise bien vite, à l’écoute de Signum Regis, que nos espoirs n’étaient pas fondés et que le quasi-restant du skeud donne dans le Speed vraiment banal et déjà mille fois entendu (« Bright Days Of Glory », « The Rain »), quand il n’est pas saupoudré de touches néo-classiques (« The Ten Thousand »). Göran Edman oblige, on pense forcément, à un moment ou à un autre, à Malmsteen … enfin surtout sur « Follow The Light », d’ailleurs. Et on n’échappe pas au traditionnel instrumental, « Mountain Haze », hyper démonstratif.
Ah ça les musiciens de SIGNUM REGIS jouent bien, très bien même, mais on la cherche encore, la petite étincelle de génie. Parce que franchement, le refrain de « Neverland » pue la naïveté infantile à plein nez, sans parler de la gamme descendante de rigueur digne des pires heures de RHAPSODY. Quand survient le dernier morceau (« Sirens Roar ») on se surprend à souffler « oh putain non encore un … », la coupe est pleine n’en jetez plus ! Le plus dommage, c’est que SIGNUM REGIS s’en sort beaucoup mieux sur du mid-tempo mélancolique, comme « Passionate Love » par exemple.
Reste que sur 50 minutes, on sent un album qui a du mal à faire briller Göran Edman (un comble !), et qui propose du réchauffé, à quelques exceptions près. Rares sont les groupes à avoir su manier brillamment mélodies AOR et Metal néo-classique, à l’instar d’AT VANCE et son excellent Only Human (2002). Signum Regis en est encore bien loin. Quel gâchis !!
Ajouté : Samedi 14 Février 2009 Chroniqueur : NicoTheSpur Score :   Lien en relation: Signum Regis Website Hits: 12903
|