# 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
}
BRAN BARR (FRA) - Sidh (2010)
Label : Trollzorn Records / Underclass
Sortie du Scud : 29 janvier 2010
Pays : France
Genre : Celtic War Metal
Type : Album
Playtime : 10 Titres - 59 Mins
Dire que sans toutes les péripéties qui ont retardé la sortie du deuxième album des français de BRAN BARR, on aurait pu se retrouver avec Sidh dans la platine depuis quelques temps déjà… C’est en juin de l’année 2005 que nos guerriers celtes envahissent les studios pour se lancer dans l’enregistrement de ce nouveau dessein. Prévu à la base pour la fin de 2007, la livraison fut repoussée à 2009 en vue d’une collaboration avec le label Det Germanske Folket. Collaboration qui n’eut finalement pas lieu, pour des raisons purement financières à en croire les ragots de caniveau. Puis les revoilà ! Janvier 2010, Trollzorn Records s’est jeté sur l’occasion d’étoffer encore un peu plus son (excellent) catalogue d’artistes Pagan, Folk, Celtic avec un fier représentant du mouvement en France ; les p’tit gars de BRAN BARR qui livrent pour l’occasion, un second opus considéré comme la suite logique de la fabuleuse épopée narrée il y a dix ans sur Les Chroniques De Naerg.
Première compo, premier coup de chaud. « Origin - The Birth Of Fearg » est une introduction vraiment prenante et débordante de celtitude. Si avec ces deux petites minutes de pure culture celte, vous n’êtes toujours pas immergé dans le bain bouillonnant préparé avec soin par BRAN BARR, c’est que vos nerfs sont trop à fleur de peau pour vous laisser vous imbiber comme il se doit de cette essence magnétique. Vous feriez alors erreur de tenter d’apprécier l’offrande immédiatement. Pour les autres, laissez-vous envahir. Laissez-vos pieds se détacher du sol, laissez-vous porter le kilt et faire respirer vos couilles velues. Laissez-les faire, car ils savent ce qu’ils font. Certains feront la relation avec ELUVEITIE. Un peu facile… A mon sens, les deux n’ont de commun qu’un vague rapprochement stylistique. Là où les suisses font dans la productivité bête et méchante, BRAN BARR m’a l’air de creuser un peu plus son sujet, de fouiller un peu plus ses histoires, d’être largement plus concerné par sa thématique. A l’instar de NYDVIND, qui a eu le bon gout de sortir également son deuxième album le même jour, sur le même label, la base principale des compositions est un Metal épique et fantastique. Il s’articule autour d’un duo vocal composé d’une voix criarde « à la Black » et de nombreux chœurs masculins pour un rendu incitant à la glorification des richesses de la terre de nos aïeuls. Ce duo est parfois complété par des chants traditionnels celtes, comme sur l’hypnotique « Profedïez » qui vous décrochera forcément un sourire avant de vous mettre un grosse claque de par sa solidité. Le sextet réussit l’alliage le plus pur entre la dureté d’un Metal des plus authentiques et la légèreté des instruments exotiques comme la cornemuse, le bodhran ou la bombarde. Si le résultat peut paraître déjà entendu, c’est la faute à cette propagation aléatoire de groupes de Pagan ou Celtic Metal, qui, à l’insu de BRAN BARR, ne savent pas toujours de quoi ils répondent. En écoutant Sidh d’une oreille attentive, on fera la différence entre les usurpateurs et les vrais passionnés. Des plages aussi chaleureuses que profondes telles « The Call - Gathering The Tribes », « Fury – Exile Of The Orphan » (et son solo très Heavy dans l’âme) ou la reprise de l’« Ode Aux Lointains Souvenirs » de STILLE VOLK sont des signes qui ne trompent pas. Petite mention également à l’instrumentale « Passage – The Curse Of The Manimal » qui emprunte plus qu’il n’y parait à « The Bard’s Song » de BLIND GUARDIAN.
Le point fort de Sidh demeure donc pour moi sa diversité. Un compromis exemplaire entre violence et tradition. Et si la comparaison avec ELUVEITIE sautera aux yeux d’une grande majorité, elle ne rend cette théorie que toujours plus obsolète, écoute après écoute. BRAN BARR n’a besoin de personne pour défendre ses valeurs et matérialiser en musique sa conception de la vie. Ces messieurs font partie d’un groupe dans lequel nous pouvons avoir entière confiance.
Ajouté : Mercredi 29 Septembre 2010 Chroniqueur : Stef. Score : Lien en relation: Branbarr Website Hits: 10830
|