# 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
}
ARTHEMESIA (fi) - a.O.a (2009)
Label : Spinefarm Records / Season of Mist
Sortie du Scud : 4 mars 2009
Pays : Finlande
Genre : Black Metal co(s)mique
Type : Album
Playtime : 6 Titres - 52 Mins
Huit ans que les fans d’ARTHEMESIA attendaient le retour des enfants prodiges d’Helsinki. Eux qui avaient recueilli grand nombre de suffrages positifs après la sortie en 2001 de Devs – Iratvs sont enfin de retour. Leur silence n’a cependant pas été radio, il y’a bien eu une démo et un EP entre temps, mais la consolation est bien maigre pour les grands mangeurs que nous sommes. Alors il n’y avait plus qu’à prier pour que ce a.O.a soit le fruit, tout aussi substantif que son prédécesseur, de huit années d’intense réflexion.
« Of The Owls, Of The Wolves And Of The Nature : Revisiting The Microcosm (Pt. I) », première plage, première désillusion. Mais c’est quoi ce délire de donner un nom aussi abracadabrantesque à une composition quand celle-ci est totalement vide ? Tout ce qu’on perçoit c’est un ronflement lointain qui fait vaguement penser à un crash aérien et encore, il fallait tendre l’oreille. Le tout pendant trois minutes ! Où est la logique ? « Valkoinen Susi » ou la suite qui m’a fait perdre mon sang froid. Idem, pendant deux longues minutes, on est livrés à nous même face au néant absolu. Faites le calcul, ARTHEMESIA m’a fait perdre cinq minutes de ma vie. Derrière, miracle, on découvre que les musiciens ont une notion (quelconque) de comment faire sonner un instrument. Ce n’est pas l’apothéose mais il y’a du son, c’est mieux que rien. Visiblement, je ne vais pas trop leur demander puisque rebelote, « Patheme » s’ouvre avec une pauvre ambiance « coucou des bois par une nuit de pleine lune » à deux balles doublée de vocaux à peine chuchotés donc à peine audibles. Il doit y’avoir très certainement une notion de beauté quelque part mais ça m’échappe… Heureusement, sur le quart d’heure qui compose cet essai, tous les passages ne sont pas à jeter et surtout pas le cœur du morceau, un paragraphe de Doom/Black fort agréable. Je suis un peu rassuré… si peu. Arrive ensuite la piste éponyme, purement insupportable car conçue sans chronologie aucune. Une voix Black pas inspirée, des tentatives d’ambiances lugubres foirées, deux trois notes de clavier qui ont trop écoutées le générique d’X-Files, des incartades Heavy, un chant clair en retrait, bref : un gros fourre-tout nauséabond qui est supposé déranger. « a.O.a » m’a logiquement décroché un sourire et rien de plus. J’ai encore du mal à réaliser qu’ils ont attendu presque une décennie pour nous offrir ceci. Les guitares sont mixées à la va-vite, elles ne sont en aucun cas caractéristiques d’un groupe qui prétend faire du Black Metal, même mélodique… Le chant d’Alpha Valtias ressemble à celui d’un octogénaire enroué qui tenterait de réciter son chapelet dominical. Seule la batterie tenue par « Omega Meggadeath » (génial comme pseudonyme) s’en sort plus ou moins avec les honneurs, car diablement rodée en dépit du flux lunaire négatif dégagé par ses voisins. Il vous faudra attendre « Liber Omega » pour entendre quelque chose de potable à défaut d’être réussi. Cette ultime tentative est un désastre mois désastreux que les autres. Enfin, ARTHEMESIA entre dans le vif du sujet, tente, propose, essaye et dynamise ! Plus directe et massive, elle vous sortira de votre torpeur et parviendra à vous surprendre grâce à un intermède Jazz au saxophone. L’idée avait déjà été exploitée par NACHTMYSTIUM sur Assassins. Je ne sais pas si les finlandais s’en sont inspirés mais le résultat est similaire, c’est une bonne trouvaille, un précieux qu’il aurait été intelligent d’exploiter encore davantage.
a.O.a qui avait démarré sur les rotules se termine dans la joie et l’allégresse. Toute proportion gardée, cette tentative est loin d’être un succès. ARTHEMESIA s’est enfermé dans un univers occulte, magique, cosmique, karmique et spirituel dont il a du mal à s’échapper. Les chansons, qui traitent des mêmes thèmes s’engouffrent dans des non-sens évitable. Et en plus, l’horoscope, ça dit que des conneries…
Ajouté : Jeudi 19 Mars 2009 Chroniqueur : Stef. Score : Lien en relation: ArthemesiA Website Hits: 10269
|