# 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
}
ABINAYA (FRA) - Beauté Païenne (2014)
Label : Brennus Music
Sortie du Scud : 28 mars 2014
Pays : France
Genre : Metal tribal
Type : Album
Playtime : 8 Titres - 45 Mins
C'est une drogue, une obsession.
C'est une folle, une sirène...
Que cette voix à l'unisson,
Qui s'est bien glissée dans tes veines...
Ces mots ont désormais trois ans. Ce sont ceux d'Igor Achard, parolier en chef d'ABINAYA pour la chanson "Algo Mais (Quelque Chose De Plus)", en cinquième position dans la tracklist de Corps (2009), deuxième opus de leur discographie après une sortie éponyme en 2004, du temps où Rock prenait encore le dessus sur Metal.
Si je cède à cette percée de nostalgie, c'est parce qu'après six ans de service sur Metal-Impact, plus de 1100 chroniques, je n'ai en tout et pour tout sur ma playlist portative que deux douzaine de morceaux, parmi lesquels "Algo Mais (Quelque Chose De Plus)", qui, au même titre que les 23 autres, est une chanson qui fait partie intégrante de mon quotidien. Puis j'oublie. J'oublie ABINAYA car ABINAYA est un groupe discret, qui n'est pas taillé pour faire de vagues, et qui nous propose à intervalles longs et réguliers un délicat embrun de poésie, de finesse, de Metal ethnique comme eux seuls savent faire. Beauté Païenne est le troisième album de ce groupe d'amis, plus amis que groupe je pense, et c'est peu dire qu'une fois encore, la magie des mots m'emportera loin, si loin, au Nord, au Sud...
Quand le Nord s'endort, le Sud ravale sa peine...
Déroutant, Beauté Païenne l'est au premier abord. ABINAYA se permet une composition de huit minutes, preuve s'il en est que le quatuor a emmagasiné suffisamment durant trois ans pour se lâcher dès le premier titre. On redécouvre très tôt, sans déplaisir, les caractéristiques qui font d'ABINAYA un groupe unique : ces aspérités tribales façon SOULFLY, cette canicule sudiste façon PANTERA, ce groove typique du NWOAHM et surtout, surtout, la prose d'Igor Achard. Si vous aimez les groupes français qui racontent n'importe quoi en français pour bien montrer qu'ils sont français, alors vous adorerez ces quelques poèmes, véritable déclinaisons de douceurs et de rimes cinglantes écrites par l'enfant qui a découvert cet univers à l'âge de 14 ans. Mon seul regret, c'est qu'à l'inverse de Corps et de la chanson "La Mort Des Amants" qui intégrait un passage des "Fleurs du Mal" de Charles Baudelaire, Beauté Païenne ne réinterprète pas un autre texte sacré de la poésie, se "contentant" d'un hommage appuyé à l'écrivain et combattant Jules Vallès sur "Le Nouvel Insurgé", en référence à son roman "L'Insurgé". En ce qui concerne l'identité musicale de cet opus maintenant, je dois reconnaître avoir été plutôt surpris à la première écoute. Qu'on soit clair : ce disque est autrement plus sombre, plus mature, plus Metal et plus dense que son prédécesseur. Certaines chansons paraissent incroyablement hermétiques, avant de pouvoir s'en imprégner à force de réécoutes. Je pense ainsi à "Haine" et son petit penchant pour le Heavy et l'épique (il y a du AMON AMARTH muré dans le soubassement où je rêve ?), à "L'Epitaphe" et ses différentes textures ou à la superbe balade "Le Noir Soleil", sur laquelle Igor Achard ne pourra pas cacher son spleen, ni textuellement, ni vocalement. Terriblement noir, Beauté Païenne s'ouvre avec toute la délicatesse d'une fleur jusqu'à ce point d'orgue de métissage qu'est "Almées". L'occasion de souligner une fois encore l'importance de Nicolas Héraud, fracassant frénétiquement son djembé et de Nicolas Vieilhomme, un batteur non-voyant qui agit avec pour seule aide une mémorisation (à ce niveau là, c'est une photographie) parfaite de l'éventail rythmique déployé sous ses baguettes. Quelle classe !
Si différent de Corps mais néanmoins capable de réveiller en nous les traceurs qui font d'ABINAYA le groupe le plus anonymement apprécié de la scène Metal française, Beauté Païenne est un octosyllabe répondant à une simple prophétie évangélique. Et le Vers s'est fait Chair.
Ajouté : Dimanche 09 Août 2015 Chroniqueur : Stef. Score : Lien en relation: Abinaya Website Hits: 6164
|