# 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
}
DEEEXPUS (uk) - King Of Number 33 (2012)
Label : EarMusic
Sortie du Scud : 23 mars 2012
Pays : Royaume-Uni
Genre : Rock Progressif Mélodique
Type : Album
Playtime : 10 Titres - 53 Mins
J’ai découvert un groupe il y a peu : DEEEXPUS. Sept gaillards venus du nord-est de l’Angleterre. On me les a conseillé sous l’étiquette d’un groupe Prog’ et même si ce genre recèle de bien belles pépites mon humeur du moment avait la fâcheuse tendance à stipuler que je risquai fort de me faire chier avec des élucubrations, démonstratives, abusives, excessives et tout ce qui se termine par « ive », bref grossière erreur. Forcée de constater une fois de plus qu’il vaut mieux parfois se faire violence et laisser une chance à la magie d’opérer si magie il doit y avoir. Je me suis engagée dans les travers de ce qui de tout évidence allait être une magnifique expérience, car oui magie il y a eu, et ce dès la première épreuve.
Malins sont ceux qui plantent le décor en y mettant les formes et les couleurs de suite, surtout si ces dernières sont flamboyantes et représentatives de tout ce qui va s’enchaîner. Malins sont donc les sept sorciers de DEEEXPUS.
Une bousculade de sensations toutes plus intenses les unes que les autres va alors s’opérer et « Me And My Downfall » va en être l’entremetteuse. Elle va précéder avec magnificence ce morceau empreint de beaucoup de douceur et mélancolie retenue : « Maybe September ». Comme dans l’épreuve précédente, on va savourer un chant riche, mais d’une sobriété qu’il est bon de saluer dans ce style plutôt connu et reconnut comme étant expansif. Il va introduire progressivement (et c’est bien de ça dont il s’agit) une luxuriante musicalité à la technicité probante le tout porté allègrement par des claviers atmosphériques.
Développant des atmosphères diverses et variées, ils nous content des histoires reflétant des entités à elles toutes seules et ce n’est pas l’originale entrée en matière de « Marty And The Magic Moose » qui vous prouvera l’inverse. Une fillette va vous inviter à un nouveau voyage sur des notes enfantines qui ouvriront le pas à une séquence électro pour enfin exploser en un Rock Progressif des plus enjoués. Si tantôt ils nous conduisent dans des espaces encore inexplorés peuplés de créatures fantasmagoriques, ils vont parallèlement inciter notre imagination à foisonner. C’est ainsi que pour ma part, j’ai vu dans le premier tome de ce conte majestueux (« King Of Number 33 : I - Pauper’s Parade ») un carrousel déglingué aux teintes ternies par le temps se dressant fièrement malgré tout sur une place poussiéreuse désertée par des badauds fuyant l’aurore boréale extraordinaire qui donnera naissance à l’enchantement suivant.
L’air s’emplit de frisson étrange et l’on est soulevé par un « King Of Number 33 : II – Accession » offrant un perfectionnisme dans les moindres détails. Le temps s’est arrêté, on est comme suspendu à une horloge qui tourne à l’envers. On retourne là où nos regrets ont abandonné des étapes de vie inachevées par nos craintes. Ce morceau se vantera d’avoir ce curieux pouvoir de nous plonger dans notre inconscient et nous permettre de vivre le temps d’un instant bref et ultime une autre vie. Vie qui s’achèvera sur un « Memo » clôturant positivement cette épopée imaginaire.
Peu de combos ont ce don si particulier de nous faire parvenir à une telle introspection et c’est donc sans surprise que je constaterais la patte d’un MARILLION à peine dissimulée (Mark Kelly – claviers), combo m’ayant bercé pendant de longues années (les plus jeunes entre autres).
Je suis profondément admirative devant tant de génie et quand bien même ces groupes ne représentent pas ce que j’affectionne le plus en matière de musique, des albums comme ce King Of Number 33 marquent indéniablement le monde du Rock Progressif et par la même occasion ma mémoire affective. Vous en connaissez beaucoup vous des albums qui dès lors qu’on les entame rien ne semblerait pouvoir les interrompre ? Il y en existe certainement beaucoup, mais ils sont comme des trésors pour lesquels il est enivrant de découvrir et précieux de conserver.
Ajouté : Mardi 12 Février 2013 Chroniqueur : Line44 Score : Lien en relation: Deeexpus Website Hits: 8152
|