# 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
}
CALLING OF LORME (FRA) - Pygmalion (2013)

Label : Auto-Production
Sortie du Scud : 4 novembre 2013
Pays : France
Genre : Indus / Electro Metal
Type : Album
Playtime : 11 Titres - 49 Mins
Le XXIème siècle sera lumineux ou ne sera pas. Même DIMMU BORGIR est récemment passé au blanc immaculé. Alors voir débarquer vaillamment les guerriers de CALLING OF LORME dans leurs loques neigeuses n'est pas qu'une douce hérésie. L'hérésie, c'est surtout que le blanc de leurs costumes ne tranche pas assez à mon goût avec le blanc d'une camisole de force. C'est cette prison de tissu dans laquelle ce groupe devrait se retrouver enfermé. Pas pour avoir enfanté un Black Metal aussi malsain et aliéné que celui de SILENCER, mais pour ce Pygmalion, qui proposera au monde sa "proclamation des préceptes indéfectibles de la Pupille", l'équivalent de la déclaration des droits de l'homme et du citoyen pour la Lorme Corporation. Onze titres (qui, s'ils avaient été dix, auraient été des commandements), ou plutôt onze articles, "dictés par la Corporation lors des tenues de la 6ème et 7ème Lune après Henka" qui vont régir la société parallèle bricolée dans l'imaginaire de ces cinq Marseillais. On ne manque pas de fadas sur le Vieux Port...
Pourtant, même si je ne me suis pas vraiment senti concerné par le délire, j'aime la profondeur du concept, ainsi que l'application que met CALLING OF LORME à le rendre vivant. J'aime à penser que cette formation a un but, et qu'aussi loufoque soit-il, il va rendre l'expérience plus singulière. Alors sans apriori, si ce n'est qu'un peu de folie ne serait même pas dommageable en ces temps bien rangés, je débute l'écoute de Pygmalion. Première bonne surprise : "Layman" évoque sans détour le RAMMSTEIN de la période Mutter, moins brodé que Reise, Reise, moins brut de décoffrage que Sehnsucht. L'équilibre parfait entre le martial, l'austère et la poésie, la modernité, l'électro. De plus, l'univers glacé et toxique du groupe cadre avec cette musique, donc la cohérence est de mise. Malheureusement, ça s'éparpille par la suite. Le riff se fait moins rugueux, le motif électronique plus présent, plus redondant, et CALLING OF LORME perd de sa rondeur, de sa charpente. "Dust" viendra timidement rééquilibrer la balance mais le mal est déjà plus ou moins fait ! De RAMMSTEIN, référence costaude et indiscutable, on dégouline sur les seconds couteaux que sont SCORNGRAIN, OOMPH !, EISHEILIG (époque Elysium) voire carrément sur certains des aspects les moins glauques d'un DAS ICH quand "Away The Grim Stars" s'essouffle. Pygmalion perd progressivement de sa pigmentation et de sa saveur, aura besoin d'une présence féminine sur l'enchainement "1720" / "Hindsight" pour retrouver la pêche, deviendra à maintes reprises écœurant de samples, nappes de claviers, arrangements futuristes ("Hindsight" ou l'éponyme...). Si le concept est à mon goût bien manié, il s'enfonce trop souvent dans certains retranchements inutiles qui désorientent l'auditeur. CALLING OF LORME aurait beaucoup à gagner à simplifier son jeu, à se concentrer sur ces riffs en béton armé absolument imparables ("Child Ebony", qui plait au fan de YouPorn que je suis) et à laisser aux claviers leurs vertus décoratives sans en faire un élément aussi central. Peut-être qu'il est déjà trop tard, que leur dessein est trop avancé pour faire machine arrière, mais la richesse huileuse de cet album en fait de facto un album perfectible.
Mais, bonne nouvelle, CALLING OF LORME, à défaut d'autorité, dispose au moins des clés intéressantes au cœur d'une scène qui n'est pas trop fréquentée. Les influences sont palpables, peut-être trop dans la mesure où elles éclipsent légèrement la personnalité haute en couleur des Marseillais qui disposent, chose rare, d'un concept, d'un visuel et d'une musique vraiment atypique. Alors tout n'est pas parfait, et le contraire serait même effrayant, mais au bout de cette œuvre complexe brille une lumière. D'ailleurs, il parait que le XXIème siècle sera lumineux ou ne sera pas.
Ajouté : Vendredi 01 Août 2014 Chroniqueur : Stef. Score :    Lien en relation: Calling Of Lorme Website Hits: 8928
|