# 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
}
DER WEG EINER FREIHEIT (de) - Unstille (2012)
Label : Viva Hate Records
Sortie du Scud : 29 juin 2012
Pays : Allemagne
Genre : Black Metal mélodique
Type : Album
Playtime : 6 Titres - 46 Mins
Le 29 juin de l’année 2012, j’ai eu très exactement 21 ans et 1 jour. Alors pour fêter ça dignement, étant donné que j’avais adoré leur premier album éponyme datant de 2009, les allemands de DER WEG EINER FREIHEIT ont eu la bonne idée de m’offrir un deuxième effort. Et rien que pour ce geste touchant, je suis prêt à leur pardonner leur retard minime. Croyez-moi, je ne suis pas spécialement transcendé à l’approche d’un anniversaire. Par contre, il y a ce côté symbolique qui me plait beaucoup. Parce que ce groupe, même s’il fait dans le Black Metal, a cette poésie dans le verbe, a cette finesse dans l’exécution qui me fait parfois aimer ce style plus que de raison. Je suis heureux de voir que le trio n’a pas changé. Il est toujours très loin des stéréotypes, de ce musée des horreurs, de ces personnages peinturlurés et caricaturaux qui m’indiffèrent. Comme quoi, les cuissardes cloutées ne confèrent pas la toute-puissance, on peut aussi faire du bon Black Metal en jeans et en baskets.
C’est justement ce décalage qui me plait, l’idée qu’un binoclard du nom de Christian Bass, jouant de la batterie sur scène pour HEAVEN SHALL BURN, puisse aussi exceller au cœur d’un projet de Black Metal romantique. DER WEG EINER FREIHEIT, ça rompt avec la monotonie du quotidien. Et écouter ce genre de disque après être passé sur le Malediction de RAGNAROK, ça me conforte encore un peu plus dans l’idée que le BM ne devrait pas se résumer à une accumulation grotesque de rage. Bien plus efficace, bien plus sournois, bien plus malin, le Unstille de ces teutons idéalise ma vision du Black Metal, puisque tout y est beau, fin, harmonieux, planant et déclencheur de rêveries. Il marque même une évolution musicale par rapport à l’EP Agonie de 2011, qui était plus ou moins régi par les codes présents sur le premier opus. Ce second effort s’en démarque, parce qu’il est assurément le plus malsain et le plus violent qu’ils aient jamais composé. Un morceau comme « Zu Grunde » par exemple, évolue sur un tempo tonitruant, très brutal. Pourtant, on y trouve de la réflexion, de la pureté, de la tristesse. DER WEG EINER FREIHEIT parvient à matérialiser le spleen, la nostalgie d’un décès récent ou d’une rupture amoureuse, grâce à une guitare lead omniprésente, dont les vibrations mélancoliques n’ont de cesse de vous prendre à la gorge, comme pour mieux sentir les sanglots que vous réprimez. Cette musique est viscérale, tellement malléable que chacun pourra l’interpréter à sa façon, selon son propre vécu. C’est d’ailleurs pour cette raison précise que j’ai depuis toujours l’intime conviction que ces messieurs voient beaucoup plus loin que le bout de leur nez. Entre expérimentations mélodiques et ambiances vague à l’âme, Unstille sonde les âmes et projette à la vue de tous nos doutes. Il occasionne un lot de pensées, de préoccupations, de réflexions hallucinant, pour la simple et bonne raison que de son commencement jusqu’à sa fin, il nous raconte une histoire cohérente. Tellement cohérente qu’on oublie ce qui gravite autour. Intimement, je n’avais pas le souvenir d’un groupe aussi pessimiste. Leur album, en me procurant quelques frissons indésirables, m’a incommodé. Ce qui n’enlève strictement rien à sa pertinence musicale.
L’heure est-elle déjà venue pour DER WEG EINER FREIHEIT de s’affirmer ? Je croyais que c’était trop tôt, mais en fait non. Unstille est une progression bienvenue, à l’heure où de grands groupes, comme celui cité plus haut, pataugent dans des eaux stagnantes. Alors, que peut-on vraiment reprocher à cette sortie ? D’être prématurée ? D’être fallacieuse ? D’être malveillante ? Ou simplement d’être elle-même ? Je m’y refuse. Car même si je ne me retrouve pas vraiment dans ce semblant de virage artistique, l’idée d’évolution, quand elle est constructive, est quelque chose qui me sensibilise. Et forcément, après avoir pris une année dans les dents, on a les nerfs à fleur de peau.
Ajouté : Mercredi 14 Novembre 2012 Chroniqueur : Stef. Score : Lien en relation: Der Weg Einer Freiheit Website Hits: 10034
|