# 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
}
ANUBIS GATE (dk) - The Detached (2009)

Label : Locomotive Records / Underclass
Sortie du Scud : 27 février 2009
Pays : Danemark
Genre : Heavy Progressif riche et captivant
Type : Album
Playtime : 12 Titres - 65 Mins
Bon j’avoue. Pas la peine d’insister. Autant un groupe de Heavy Progressif peu inspiré et se contentant de reproduire les recettes de ses grands frères peut me faire chier au bout de dix secondes, autant un album réussi du même style me donne matière à m’enthousiasmer jusqu’à la fin de l’année.
Lecteurs assidus, vous ne serez certainement pas passés à côté des trois précédentes chroniques d’ANUBIS GATE, et si vous parcourez en ce moment ces lignes, c’est que le talent des Danois ne vous aura pas non plus échappé. Grand bien vous en fasse, car il eut été dommage de manquer le feu d’artifice qu’est le grandiose The Detached.
Bon, ok, second aveu de la soirée, si je rédige ce texte en cette fin de journée plutôt morne d’ailleurs, c’est sur les conseils d’un ami, qui m’a plus que grandement conseillé de jeter une oreille avisé sur le dernier méfait des nordiques (merci Dom !).
Mais quelle suggestion judicieuse ! Enfin un groupe qui a compris que les cavalcades permanentes et les démarquages plus ou moins habiles de pierres angulaires déjà vues et revisitées ne menaient nulle part !
Et on se retrouve au final en face d’un album aussi varié qu’homogène, performance revitalisante pour un style qu’on croyait bien trop encombré par les tacherons pour survivre encore cinq ans. A l’instar d’un QUEENSRYCHE au sommet de son art, ou d’un STRATOVARIUS débarrassé de ses tics commerciaux ou trop pompeux au contraire, ANUBIS GATE n’oublie pas qu’avant d’en mettre plein la vue avec des démonstrations/masturbations instru-mentales, il faut d’abord composer de bonnes chansons. Dont acte. The Detached est truffé de mélodies enchanteresses et de rythmique explosives, de chœurs divins et d’arrangements subtils, de riffs démoniaques et de soli vengeurs, j’en passe et des meilleures.
Au niveau des réalisations tenant du sans faute, il faut derechef vous jeter sur les gros morceaux que sont « Out Of Time » et ses nappes vocales chatoyantes, « Yiri », digne de figurer sur l’immortel Images And Words de DREAM THEATER, tant son aspect Pop est transcendé par une progression fabuleuse, « Lost In Myself » et son MASTERPLAN du meilleur cru, « Bloodoath » et son côté technoïde renforcé par un solo qui vous envoie dans les étoiles, « Dodecahedron » pour ses passages Thrash nuancés par des arrangements très fouillés, l’intermède « Ammonia Snow » pour la beauté de ses lignes de chant, l’épique « Options-Going Nowhere » pour ses variations léchées et son optique résolument novatrice, et le très influencé Empire « A Lifetime To Share ».
Mais me direz vous, qui y’a-t-il à jeter ? Et bien justement pas grand-chose, et si je poussais mon euphorie un stade plus loin, je dirais même rien ! Et je le fais céans ! The Detached est une réussite totale, à ranger dans la catégorie "Grand album du mois", voire de l’année, même à peine un tiers entamée !
Et je reste la dans l’objectivité la plus totale, car il ne s’agit pas là d’une clémence passagère envers un courant que j’ai égratigné plus qu’il ne le méritait sans doute, mais bel et bien d’un jugement impartial sur une pièce musicale impériale.
Des musiciens qui jouent et ne surjouent pas, un chanteur qui ne cherche pas à s’égosiller pour prouver qu’il peut atteindre des notes plus aigues que son voisin, et une section rythmique créative, au service des morceaux et pas en quête de la palme de la double croche passée le plus rapidement possible m’auraient ils réconcilié avec Le Heavy Progressif ?
C’est possible, mais pour rester dans les limites de la pondération, je dirais tout simplement qu’ANUBIS GATE accouche là de son meilleur album et se permet au passage de redéfinir quelques notions qu’on croyait périmées depuis qu’une armada d’indigents nous avaient fait confondre musique riche et intelligente et remplissage de bêtes de foire.
A savoir qu’il faut d’abord apprendre à marcher avant de courir.
Et qu’avant une longue démonstration, il faut un théorème solide.
Ajouté : Samedi 04 Avril 2009 Chroniqueur : Mortne2001 Score :      Lien en relation: Anubis Gate Website Hits: 21761
|