# 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
}
WINDS OF PLAGUE (usa) - Decimate The Weak (2008)
Label : Century Media Records
Sortie du Scud : 5 février 2008
Pays : Etats-Unis
Genre : Deathcore symphonique
Type : Album
Playtime : 10 Titres - 37 Mins
Il est intéressant de constater avec quelle force le Deathcore symphonique est rentré dans nos mœurs. Plus grand monde ne semble s’offusquer de la juxtaposition de ces deux termes que tout sépare. Pas mal de groupes ont depuis tenté l’expérience mais très peu ont réussi à égaler la justesse du mariage orchestré par les américains de WINDS OF PLAGUE. Forts de belles dispositions entraperçues sur A Cold Day In Hell en 2005 et d’un contrat encore fumant chez Century Media, la formation, emmenée par le charismatique Johnny Plague mais surtout, tirée au sommet par sa séduisante claviériste, Kristen Randall (qui s’est lancée dans le porno, ou presque, depuis son éviction) a récidivé en 2008 avec un Decimate The Weak qui allait offrir aux trouillards la possibilité de s’affirmer aux yeux du public en osant les combinaisons stylistiques les plus improbables. En quelques sortes, WINDS OF PLAGUE a ouvert certaines portes sur la scène mainstream.
Disposant d’une équipe technique emmenée par Tue Madsen ayant l’habitude des prods massives (AS I LAY DYING, HIMSA, THE HAUNTED), le sextet (et pas sextape, quoique, avec Kristen…) n’a eu aucun mal à livrer un CD qui aura du mal à sonner plus « ricain ». Avec un tel enchevêtrement de symphonies, orchestrations, variations vocales, ambivalence de guitares et breakdowns bétons, il ne valait mieux pas faire les choses à moitié. Défi accompli pour WINDS OF PLAGUE qui ouvre le bal avec « Anthems Of Apocalype », qui, comme son nom l’indique, est un hymne au parfum d’Apocalypse. Entre les longues envolées épiques et les riffs mastocs, en passant par les growls légèrement pig-squealés, tout y est. Le début de l’album est d’une intensité impressionnante, d’autant plus que les mecs enchaînent avec « The Impaler » et l’éponyme sur laquelle participe Sal Lococo de SWORN ENEMY. Béton. On se laisse progressivement prendre au jeu des ambiances, plus alambiquées les unes que les autres. Néanmoins, je n’ai pas pu m’empêcher de remarquer que les premières compositions disposaient d’une accroche plus importante que les autres. Ces dernières passent comme une lettre à La Poste, mais avec préavis de grève et diverses réunions syndicales. Le gros bordel quoi ! On perd parfois le fil, entre des « Reloaded » et des « Unbreakable » dénuées de caractère. Mais WINDS OF PLAGUE retombe toujours sur ses pattes avec des morceaux comme « Legions » ou « One Body Too Many » qui renouent avec l’esprit originel de la bande, jusqu’alors axée Death moderne et mélodique. Une conclusion qui se veut des plus épiques et rassurante. Le combo dispose aussi d’un atout majeur et d’un frontman d’exception dans son line-up en la personne de Johnny qui est toujours là pour donner la bonne direction à suivre pour ses compères. Ses incessantes variations vocales semblent entraîner les musiciens sur la même voie : diversité et technicité poussée à bout. Par la suite, ils choisiront la surenchère et l’exagération. Le jusqu’auboutisme exaspérant de The Great Stone War qui me fera éternellement préférer ce Decimate The Weak, peut-être plus hésitant mais autrement plus sincère.
N’oublions pas, pour conclure, que cette galette est probablement une des pierres angulaires de l’excentricité qu’on retrouve aujourd’hui dans le Deathcore. Peut-être pas parce qu’ils ont été les premiers à le faire, mais parce que ce sont eux qui ont eu le plus foi en leur projet et qui ont disposé d’un soutien qui a engendré le plébiscite d’un public fidèle dont je fais partie, et qui, aujourd’hui, leur en est grandement reconnaissant.
Ajouté : Vendredi 11 Février 2011 Chroniqueur : Stef. Score : Lien en relation: Winds Of Plague Website Hits: 8880
|