# 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
}
HANGING GARDEN (fi) - At Every Door (2013)

Label : Lifeforce Records
Sortie du Scud : 25 janvier 2013
Pays : Finlande
Genre : Doom / Death Metal
Type : Album
Playtime : 8 Titres - 54 Mins
La morte saison arrive mes amis ! Accompagnée de son habituel lot de vents glacials et de paysages décharnés. En cette période de froid intense approchant à grands pas, qui d'autre qu'HANGING GARDEN pourrait retranscrire une atmosphère si morne et triste ? Un bon paquet de formations, je vous l'accorde. Sauf que nos Finlandais ont un don pour le faire de telle manière qu'ils risquent bien de faire de l'ombre à quelques mastodontes du genre. Et en plein hiver ! C'est vous dire s'ils ont du talent. Après leurs deux premiers albums Inherit The Eden en 2007 et TEOTWAWKI en 2009, le groupe signe chez Lifeforce Records et nous pond cet At Every Door en 2013 ainsi qu'un EP, I Was A Soldier, qui l'a suivi de près puisque sorti cette même année. Le style dans lequel nos gaillards œuvrent est assez difficile à déterminer, et vous allez vite comprendre pourquoi. J'ignore si leur nom fait référence au titre "Hanging Garden" de THE CURE, mais en tout cas, lorsqu'on connaît ce titre des Britanniques, on ne s'attend certainement pas à écouter quelque chose de joyeux en écoutant ce CD.
Quoi qu'il en soit, on ne se posera pas la question bien longtemps. "Ten Thousand Cranes" ne tardera pas à confirmer nos soupçons ; At Every Door est toxique et nocif. Vous retrouverez dans ce CD une telle multitude d'influences stylistiques que cela lui confère une personnalité en béton. Pardonnez la vulgarité dont j'ai fait preuve pour classer cette œuvre dans le Doom / Death Metal, mais si j'avais voulu rentrer dans les détails, je ne m'en serai pas sorti, et vous non plus. Si on retrouve effectivement du Doom / Death dans le fond, vous pourrez y ajouter des teintes Gothic, Sludge, Post-Hardcore, avec un soupçon de mélodies, ce qui donne lieu à une alchimie tout simplement divine. Les grunts caverneux de Toni Toivonen sont de qualité et n'hésitent pas à nous enfoncer dans les abysses ardents. Ils contrastent habilement avec le chant clair aérien du guitariste Jussi Hämäläinen, qui se veut parfois carrément funéraire, notamment sur "Ash And Dust", une piste qui m'aurait presque arraché une larme tant elle m'a touchée avec son jeu de guitares sinistre à 2'05''. Et des malaises comme ça, croyez-moi, vous n'avez pas fini d'en entendre. Mais une chose est sûre, aucun morceau n'est aussi maladif que "The Cure". Coïncidence ? J'en doute. Torturée jusqu'à la moelle et lancinante, cette musique se présente comme un cercle tellement vicieux que sa répétitivité vous broiera le moral. Elle pourrait d'ailleurs justifier à elle seule l'achat d'At Every Door. Mais c'était sans compter sur l'outro de 10 minutes du nom de "To End All Ages" qui vient réduire nos nerfs dans le néant le plus total. Après cela, inutile de se mentir : HANGING GARDEN est une formation unique et dotée d'un savoir-faire que l'on ne retrouve nulle part ailleurs. Les Finlandais ont décidément une sacrée inspiration et n'hésitent pas à nous la faire ressentir. Il va de soi qu'après une telle prestation, peu d'entre nous peuvent se vanter d'avoir survécu. De ce fait, je ne pourrais que vous conseiller de vous éloigner le plus possible de ces gaillards sous peine de vous éteindre dans une lente asphyxie.
Car cet album n'est autre qu'un poison mortel qui s'infiltre au plus profond de vos veines et engourdit la totalité de vos membres jusqu'à ce que votre cœur lâche. Même s'il peut paraître innocent sous sa douce mélancolie, il ne faut surtout pas l'approcher de trop près. Mais si comme moi, subir les châtiments d'une formation talentueuse ne vous dérange guère, je ne peux que vous inciter à écouter ce véritable hymne à la tristesse. Mais attention ! La vraie ! Pas celle du Titanic qui coule, avec le beau DiCaprio qui met trois plombes à geler derrière les violons ! Bien sûr que non. Je parle de celle qui est douloureuse, qui brûle le cœur, l'âme et qui est inconsolable pour la simple et bonne raison qu'elle reflète la fin d'un monde dont nous avons nous-mêmes causés la perte. Alors chantez, mes amis, tant que vous le pouvez. Et par pitié, continuez ainsi jusqu'à votre dernier souffle, et même au delà ! Il ne manquerait plus que la mort soit un obstacle...
Ajouté : Vendredi 28 Février 2014 Chroniqueur : Nash Score :      Lien en relation: Hanging Garden Website Hits: 9366
|