# 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
}
SAINTE OMBRE (FRA) - Contes Et Châtiments (2009)
Label : Auto-Production
Sortie du Scud : 24 décembre 2009
Pays : France
Genre : Heavy Metal symphonique
Type : Album
Playtime : 10 Titres - 48 Mins
SAINTE OMBRE ou si le kitch m’était conté. Formé en 2007 du côté de notre belle Vendée, ce quatuor est un fier représentant du Heavy Metal à la française. On détectera même très vite un brin de chauvinisme dans leur œuvre, qui fait un écho improbable à la mode désormais obsolète du « consommer français ». Ce premier et unique album, poétiquement nommé Contes Et Châtiments a beau être traité dans nos colonnes avec beaucoup de retard, puisque sorti le jour du réveillon 2009, ce ne sont surement pas ces deux années de décalage qui changeront quoique ce soit au regard qu’on peut porter sur une musique ouvertement vieillotte et poussiéreuse. Qu’on soit clair, SAINTE OMBRE barbotte dans un style aux fondations inébranlables et cette sortie ne risque pas de vous faire changer d’avis sur le Heavy Metal tricolore, déjà très bien fourni en VRP. Mais, puisqu’il y a un mais, en étant honnête deux secondes avec soi-même, on reconnaitra également bien volontiers que leur conception de la musique apporte un tout petit caillou à l’édifice.
Derrière ses mauvais airs de BLOWBACK, un autre groupe de Heavy Metal français à chanteuse, SAINTE OMBRE est d’une véritable luminosité. En premier lieu, le groupe a engagé au micro une vocaliste dont le chant ne s’inscrit pas du tout dans un registre Metal classique. Loin d’être forcé, loin d’être hargneux mais très lyrique et vibrant, il donne au Heavy Metal du groupe une fraicheur insoupçonnée. Avec la très musicale « Mr. Le Comte » qui ouvre avec brio ce Contes Et Châtiments, on a presque l’impression d’être projeté dans une comédie musicale un peu Hard Rock aux décors gothiques. Céline ne donne pas du tout l’impression de surjouer, comme c’est le cas généralement et, de fait, procure à ce premier morceau une belle lisibilité. Les premières minutes du disque sont fluides, prenantes. SAINTE OMBRE a visiblement fait le choix de commencer par le tube absolu de son répertoire, car on ne retrouvera plus jamais de tels arrangements symphoniques sur le reste de leurs compos. Extrêmement orchestral dès son commencement, Contes Et Châtiments prend un virage inespéré à la vue d’une pochette bouffée par les mites et d’un concept franco-français qui, à l’heure où tout le monde chante en anglais, apparaît injustement comme quelque chose de ringard et/ou rétrograde. Les Vendéens essaient, parfois péniblement, de redonner ses lettres de noblesse à l’authentique Heavy Metal français. Quoiqu’il arrive, on peut désormais parler d’eux comme de véritables musiciens, tant la recherche de l’accord parfait et de la mélodie est une constante dans ce disque. C’est assurément ce qui est le plus agréable. L’association orgue-violons sur la mid-tempo « Abigail » ou les solos inspirés de David rendent très rapidement Contes Et Châtiments accessible à quiconque apprécie à la fois Metal et musique classique. Les Français s’extirpent avec brio du piège qu’ils se sont eux-mêmes tendu en évitant les redondances cycliques et le sympho-pouêt-pouêt à deux balles. Eloigné de toute forme de cliché, SAINTE OMBRE propose à son public un premier opus onirique, malicieusement écrit, avec son lot d’atmosphères, tantôt moyenâgeuses, tantôt orientalisées, tantôt religieuses. On a bien évidemment conscience que cette galette n’a pas l’impact nécessaire pour qu’on puisse parler de révélation, ni même une production qui lui permettrait de prendre son envol. Mais armée d’une chanteuse qui, grâce à sa simplicité vocale, apporte un vrai plus à ce Heavy Metal et de musiciens qui sortent les riffs et patterns justes au bon moment (comme sur la très cohérente « Destination Finale »), la formation peut espérer creuser confortablement son trou, sans qu’on vienne la déranger.
Je ne suis vraiment pas fan de Heavy Metal symphonique mais parfois, il arrive de faire des rencontres dont on se souvient pendant longtemps. C’est le cas pour SAINTE OMBRE qui, par le biais de ce premier opus brossé et épique, parviendra à séduire une frange de métalleux plutôt large, si ce n’est pas déjà fait. En toute honnêteté, si Contes Et Châtiments est loin d’être l’album de la décennie, on galèrera à lui faire de vrais reproches, tant il semble être sincère et naturel. A ce titre, on parlera plutôt d’un conte que d’un châtiment.
Ajouté : Jeudi 18 Octobre 2012 Chroniqueur : Stef. Score : Lien en relation: Sainte Ombre Website Hits: 7870
|