# 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
}
BLUTMOND (ch) - The Revolution Is Dead (2012)
Label : Code666 Records
Sortie du Scud : 19 novembre 2012
Pays : Suisse
Genre : Black Avant-Gardiste
Type : Album
Playtime : 12 Titres - 61 Mins
A la vue de la pochette voilà ce que je me suis dit de prime abord : « ah ah, encore des primates aux chaleurs non dissimulées, c’est open-bar les mecs ? Vos fantasmes se lisent avec autant de faciliter que se suivent et se ressemblent chaque épisode des "Feux de L’amour" ». A ça vous auriez pu et auriez eut raison de me rétorquer : « pauvre gourde, gardes ton clapet clôt, allumes la cheminée avec le "Glamour" d’octobre, balances ton "pisse mémé" (tisane) à la verveine et restes parfaitement sobre afin d’appréhender le petit chef-d’œuvre qu’il va t’être donné d’entendre ».
Toi, oui toi, petit diable qui a mis sur ma route cette galette en toute innocence, croyais-tu pouvoir m’amadouer de la sorte ? Savais-tu par avance l’effet qu’il produirait chez moi et ce même après plus d’une heure de nage et trente minutes de muscu ? (oui, j’ajoute qu’après ça je suis aux abonnées absentes, HS, faut pas m’faire ch….. quoi). J’étais fatiguée punaise et bien, pourtant ou devrais-je dire heureusement, gardé au creux de ma réserve personnelle il ne tenait plus en place le bougre, si si je l’entendais me conter ses aubades du fond de la carlingue de mon ordinateur, comme un être possédé que l’on garde en cage.
J’entamais donc un nouveau voyage musical à une heure tardive (comme d’hab’, oui je sais), mais n’est-ce pas l’instant idéal, le plus propice à une concentration extrême, l’heure où tout s’éteint, tout dort (surtout mes nains), celle même où le cycle de mon lave-vaisselle se termine ? Et bien oui ça fait sourire or je suis de celles et ceux qui profitent de ces instants pour s’adonner enfin à ce qu’ils aiment. Ce soir encore je n’aurais aucun regret d’avoir veillé longuement au risque d’un réveil plus chaotique demain sachant qu’il m’est déjà insupportable d’avance d’être secoué par les dernières merdes à la mode.
Je suis tombée amoureuse de vous, non pas "vous" mais eux BLUTMOND et quand bien même ils sont Suisse et donc de surcroît spécialiste d’une de mes gourmandises ce n’est pas de chocolat dont il s’agit, mais de musique aussi tenté de penser que le terme musique puisse bien suffire à ce qu’ils créent.
Référencés dans la catégorie Black Metal, ils vont bien au-delà et franchement vous en jugerez par vous-même car c’est une diversité à couper le souffle qui balaie les douze pistes de ce The Revolution Is Dead. Par pitié ne passez pas à côté de cette anarchie mélodique. Tout n’y est que désordre foutrement bien orchestré et oui c’est contradictoire, mais c’est bien l’art et la manière qu’a le combo de mettre en forme sa schizophrénie.
Au risque de détailler chaque once de ce joyau et de devenir rasoir, je ne peux m’empêcher toutefois de vous dire tout le bien-fondé de chaque composition et ça commence par le commencement OF COURSE. « Putting Hearts Together » qui débute comme THE CNK entonne la chansonnette puis laisse les riffs classiques céder leur place à un saxophone romantique introduisant une puissante voix féminine. Voyez déjà tout ce qu’un seul et même morceau peut se vanter d’avoir pour charmer l’auditeur. C’est sans compter sur de nouvelles armes comme la rage que John B. (chant) déploiera autour d’une ambiance rythmée et bucolique à la fois grâce à ses claviers en note de fond sur « Regret » (non aucun regret je l’ai dit).
A la sauvette, ils se paieront le culot de nous offrir un cours de danse, un « Pas De Deux », mais comment danse-t-on sur une frénésie électrique aux accents electro qui de plus va flirter avec le jazz ? Moi j’en suis restée le cul scotché victime des efforts fournis en début de soirée, mais mon cœur lui n’a cessé de s’émouvoir sur cet enchaînement peu probable avec « Stop The Rain, Neuzeit Jesus », enveloppant sa résonance d’introduction de battements lourds et de chœurs célestes. Un ensemble juste parfait dans son équilibre, son alternance d’uppercuts du droit et de caresses du bout des doigts.
Vont se succéder « Moonlit Chair», « BreakDown 2012 », « Birds Of Prey » autant de titres plus barrés les uns que les autres, oscillant sur des atmosphères Black mêlés de Jazz, de Dark mélodique couchant ici et là des accords Heavy presque solennels.
Ceci est une bombe qui même maniée avec précaution va vous pulvériser. Un tel travail ça se félicite, revisiter le genre risquant d’ailleurs de s’en éloigner complètement est audacieux et pour tout ça messieurs bravo, bravo d’avoir osé nous secouer, nous surprendre.
J’ai pris un pied tel que je ne peux que vous charger sur mon lecteur et vous emmenez passer la nuit avec moi (amoureuse), enfin juste le début, je suis rincée mais quelque chose me dit que le marchand de sable va descendre un versant Alpin pour errer non loin de la Bretagne.
Ajouté : Vendredi 19 Octobre 2012 Chroniqueur : Line44 Score : Lien en relation: Blutmond Website Hits: 10598
|