# 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
}
A PLEA FOR PURGING (usa) - The Marriage Of Heaven And Hell (2010)
Label : Facedown Records
Sortie du Scud : 6 juillet 2010
Pays : Etats-Unis
Genre : Metalcore
Type : Album
Playtime : 10 Titres - 40 Mins
Amen mes frères. A PLEA FOR PURGING n’est plus. C’est d’autant plus triste que cette fin d’été 2012 aura été la dernière occasion de voir le charismatique et imposant Andy Atkins sur scène. Et dans le genre bonne bouille, on peut difficilement faire mieux. Cette formation américaine de purs beaux gosses a donc splitté et qu’on soit clair, c’est une perte. Le Metalcore américain est plus ou moins en perte de vitesse cette année et la raison est mathématique. Plus y a de groupes, plus y a d’idées, plus y a d’albums et plus y a de bonnes raisons de s’en détourner. Cependant, A PLEA FOR PURGING c’était particulier. Pas vraiment le haut du panier, mais pas loin. Son Metalcore compact aura été un exemple au cœur même d’une scène où tout se ressemble. Ces gars avaient du caractère et de la personnalité. Ils l’avaient exprimé sur deux albums avant d’atteindre avec ce qui sera l’objet de ce papier, le maximum de leur potentiel artistique. Retour donc sur The Marriage Of Heaven And Hell sorti en 2010, qui précède une ultime banderille du nom de The Life And Death Of A Plea For Purging dont nous parlerons plus tard.
Trois années après A Critique Of Mind And Thought, une seule après Depravity, les Nashvillois ont donc trouvé l’équilibre le plus instable qui soit entre productivité et efficacité. Trois albums en trois ans, on aurait pu craindre qu’Andy Atkins et les siens ne s’essoufflent. Surtout Andy en fait. C’est tout l’inverse. Prenant aux tripes, fort de ce son de guitares très proche de MESHUGGAH (« Golden Barriers »), The Marriage Of Heaven And Hell rivalise de puissance et d’explosivité. Avec un véritable pro du Metalcore aux manettes (Joey Sturgis, ATTACK ATTACK, WE CAME AS ROMANS, EMMURE, THE DEVIL WEARS PRADA), on ne pouvait pas s’attendre à autre chose qu’à un album qui sonne comme toute les plus grosses productions Metalcore actuelles. C’est un fait. La seule différence, c’est qu’A PLEA FOR PURGING a réalisé dans l’écriture de ses morceaux, dans leurs arrangements, dans leur exécution, un travail de sape monumental qui lui donne deux fois plus de volume. Ce n’est pas un album classique, même s’il s’en rapproche. Les Américains ont foi en leur Metalcore comme ils ont foi en Dieu et ça s’entend. Les breakdowns, les mosh parts sont aux premières loges de cette œuvre très regroupée. C’est imposant, costaud mais pas idiot. Que ce soit sur « And Weep », « Finite » ou « Shiver », on distingue très facilement la profondeur abyssale dans laquelle s’engouffre le groupe. On a très vite peur que The Marriage Of Heaven And Hell s’achève comme il a commencé, dans la cacophonie, sans qu’il n’y ait rien de consistant au milieu. Là encore, mauvaise pioche. Quelques vocaux clairs, œuvre de Matt Montgomery (FOR TODAY) viennent détendre l’atmosphère sur « The Wall » sans qu’on puisse parler d’omniprésence, ce qui est toujours plaisant. Majoritairement, c’est le chant très âpre et profond d’Andy qui vient se coller sur des guitares aux motifs proches du Djent. Mais il y a aussi de belles surprises. Je pense principalement à « The Jealous Wings », une superbe ballade-core qui commence dans la brume avec une voix enfumée et vaporeuse, un peu à la Steven Wilson avant se déboucher sur un refrain atmosphérique très pur et lunaire. Une guitare sèche vient s’incruster, un petit mid-tempo sympa rythme le morceau et c’est tout l’album qui prend une nouvelle tournure. Une étoile filante vient de le traverser. A l’instar de MARTYR DEFILED qui pondait avec « Archae » une piste en total décalage avec son disque granuleux, A PLEA FOR PURGING réalise avec cette création un contrepied parfait alors que la cérémonie de mariage est sur le point de s’achever. On entr’aperçoit alors ce petit bout de paradis promis dans le titre de l’opus, majoritairement dominé par l’enfer.
Plus jamais on n’entendra A PLEA FOR PURGING jouer avec cette excitation et ce feu dans le regard. The Marriage Of Heaven And Hell est un disque de Metalcore plus qu’abouti. Il peut s’inscrire comme une référence à l’heure où ce genre de compliments est de plus en plus rare à lire. En 2010, il était un grand pas en avant. En 2012, il l’est toujours. Puisse ce disque continuer à être intemporel, au moins pour quelques années encore. C’était leur dernier coup de maître. La suite des évènements sera d’un acabit pour le moins dramatique.
Ajouté : Vendredi 14 Septembre 2012 Chroniqueur : Stef. Score : Lien en relation: A Plea For Purging Website Hits: 7368
|