# 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
}
CRADLE OF FILTH (uk) - The Manticore And Other Horrors (2012)
Label : Peaceville Records
Sortie du Scud : 29 octobre 2012
Pays : Angleterre
Genre : Metal extrême et orchestral
Type : Album
Playtime : 11 Titres - 52 Mins
Non, la messe n’est pas encore dite. Après avoir jubilé lors du festin de l’Agnus Dei, narguant la foule pieuse de son sourire ensanglanté, Dani Filth ne comptait pas abdiquer sans une ultime provocation qui l’enverrait aux enfers, place qu’il mérite amplement après une carrière brodée de coups de génie et plus récemment, de pétages de plomb. CRADLE OF FILTH l’institution, CRADLE OF FILTH la décomposition et enfin, CRADLE OF FILTH la résurrection. Un terme religieux ma foi fort bien choisi pour caractériser l’incroyable retour opéré par les Britanniques sur le devant de la scène extrême avec des Godspeed On The Devil’s Thunder et Darkly, Darkly, Venus Aversa qui auront mis sur le cul plus d’une âme profane. Après les déculottées piteuses prises sur Nymphetamine et Thornography, on a enfin revu la belle paire de couilles du castrat Filth. Et ce n’est pas pour nous déplaire. Voici donc The Manticore & Other Horrors, la dernière ligne du décalogue, son pendant biblique étant, selon l’Exode : « tu ne convoiteras point la maison de ton prochain ; tu ne convoiteras point la femme de ton prochain, ni son serviteur, ni sa servante, ni son bœuf, ni son âne, ni aucune chose qui appartienne à ton prochain ». A l’heure où je parle, si CRADLE OF FILTH n’est plus à son apogée, ils ont encore tout pour eux, et nul besoin d’aller voir ailleurs. Cet opus va le prouver.
On peut reprocher beaucoup de choses à CRADLE OF FILTH. Mais pas de savoir évoluer. Les deux derniers albums étaient des progressions. Les deux d’avant des régressions. The Manticore & Other Horrors suit donc une certaine logique dans leur discographie évolutive. Cette fois-ci, il y a comme un parfum de la période Midian qui se dégage de ce bloc d’encens, âcre à la respiration comme l’ammoniac. Les sujets abordés dans cette œuvre sont explicites, une collection de mythes qui passe en revue la manticore, la chimère, les vampires, les titans, les lycanthropes, les contes de fées et les personnages de la littérature de Lovecraft. Pas une grande nouveauté, mais un concept intéressant s’il en est. Le bout de gras qui se dispute un verdict hésitant, c’est évidement la musique. Plus lourde, plus rapide, plus Punk aussi avec par exemple « Succumb To This », elle revient aux racines sous toute ses formes, à commencer par un enregistrement aux studios Springvale And Grindstone à Suffolk, ville d’origine de nos vampires. Je parlais de Midian plus haut. Ceux qui ont apprécié ce disque retrouveront une seconde jeunesse ici, car CRADLE OF FILTH réutilise les instruments rouillés qui ont forgé la qualité de cet album, à commencer par la présence latente de nombreux vocaux féminins, qui servent justement à renforcer ce lustrage érotico-romantico-vampirique qu’on leur connaît. Enveloppé avec soin dans une production d’où s’envolent des nuées de papillons, le Metal extrême des Anglais redessine du bout des doigts un nouvel élan dans leur carrière. Les parties symphoniques sont dosées avec toute la parcimonie nécessaire pour éviter de tomber dans le pompeux et le grandiloquent. CRADLE OF FILTH a retapé sa riffothèque pour en sortir les meilleurs, ciselés comme sur « Huge Onyx Wings Behind Despair » ou mélodiques sur « Frost On Her Pillow ». En dehors des traditionnels interludes narrés, des pauses mélancoliques, des breaks lunaires, ça va vite, très vite. Avec un Martin « Marthus » Skaroupka, très en jambes, loin d’être le Adrian Erlandsson du pauvre derrière sa batterie, le groupe semble trouver une vivacité toute inédite dans ses rythmes. Un second souffle d’autant plus appréciable que Daniel Firth, le petit nouveau, patine encore à la basse. Et si The Manticore & Other Horros manque cruellement d’un vrai tube, bien que « The Abhorrent » s’appropriera sans difficulté le poste, on ne pourra pas lui jeter l’opprobre plus que de raison, tant il replace CRADLE OF FILTH au rang de pointure, tout en se distinguant clairement de Darkly, Darkly, Venus Aversa. Reste l’énigme Dani Filth. S’il parait évident qu’il a perdu en théâtralité, ses expressions vocales traficotées sont loin d’être figées et continuent à alterner sans relâche les timbres les plus surnaturels qui soient. Comme souvent, énervant de maitrise, le bonhomme vit à fond son personnage et perpétue ses poussées aigues (« Manticore »), insupportables comme l’acné du matin sur le visage.
J’ai bien essayé de prendre les quatre chemins pour ne pas avoir à dire trop brutalement que ce dixième album est plus une réussite qu’un échec. Au diable la fierté ! The Manticore & Other Horrors est une œuvre construite et passionnante, peut-être linéaire par moments, mais qui mettra du plomb dans le crâne de beaucoup de sceptiques. Ce n’est pas une prise de conscience soudaine et inexplicable. C’est la mise en application d’un principe de base. Savoir tirer le meilleur de sa propre expérience pour le mettre au service de son prochain. Longtemps égoïste sur ce point, CRADLE OF FILTH a réussi à exploiter un concept qui, s’il était découvert par plus de monde, permettrait à la Terre de tourner plus rond.
Ajouté : Mardi 04 Septembre 2012 Chroniqueur : Stef. Score : Lien en relation: Cradle Of Filth Website Hits: 11590
|