# 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
}
PESTIFER (be) - Reaching The Void (2014)

Label : Great Dane Records
Sortie du Scud : 15 avril 2014
Pays : Belgique
Genre : Death Metal technique
Type : Album
Playtime : 9 Titres - 40 Mins
La fratrie Gustin est de retour ! Si Didier (de son vrai nom Gueusquin d'ailleurs) nous fait toujours bien marrer de ses imitations décalées, ce n'est pas de lui dont on va parler aujourd'hui. Pas question d'esquisser l'ébauche d'un sourire. PESTIFER n'est pas dans la caricature mais dans l'authenticité. Emmené dès sa création en 2004 par les frangins Adrien et Philippe, le groupe belge se fend depuis le début de son aventure d'un Death Metal tantôt technique, tantôt progressif, toujours percutant. Après le très bon Age Of Disgrace de 2011, une belle révélation à redécouvrir en nos pages, le groupe migre vers les écuries luxueuses de Great Dane Records et s'atèle à la sortie de son deuxième album, Reaching The Void, attendu de pied ferme comme le messie venant confirmer les bonnes dispositions d'Age Of Disgrace. A cette différence près que PESTIFER ne semble pas disposé à vouloir prouver quoi que ce soit à qui que ce soit, et que le feeling originel de cette sortie lui sera autosuffisant.
Les quinze premières secondes de "Witness Of The Loss" sont un véritable tourbillon. Et quand je dis tourbillon, ça implique une notion de phénomène naturel incontrôlable. Exactement ce qu'est PESTIFER. Il n'y avait que ce jeu de guitare échevelé pour nous emmener si vite, sans embarquement préalable, vers un sous-sol glauque bourré de personnages miséreux et infréquentables. Viol technique dès son début, Reaching The Void orchestre rapidement un contraste très intéressant entre une batterie remuante et un riffing serein, qui bascule vers une identité totalement old-school à 3'45. C'est à ce moment précis que tous les paramètres qui faisaient d'Age Of Disgrace cette bonne cuvée de Death tannique me reviennent en plein visage. Je pense à cette basse avantageusement mise en avant, à cet alliage de Death vieille école façon PESTILENCE époque Testimony Of The Ancients et de Death variant et progressif, propriété d'une nouvelle génération qui n'hésite pas à moderniser des temples en ruine. Au milieu de morceaux étouffants, changeants, innovants, PESTIFER prend le temps de divertir, comme en atteste ce riff angoissant à 1'53 sur "Exiled To The Abyss" qui, s'il était reproduit au violon, ferait assurément penser au stress contagieux des cordes stridentes de Bernard Hermann dans le "Psychose" d'Hitchcock. Chaque compo a son caractère, sa spécificité, et si Reaching The Void en lui-même est régulier dans l'effort, à l'autopsie, ce sont différents modes opératoires qui sont révélés. Moins pompeux (et c'est tant mieux), qu'un WITHIN THE RUINS, moins torturé qu'un ATHEIST mais aussi direct et suffocant qu'un OBITUARY, PESTIFER symbolise finalement l'émergence d'une jeunesse dorée, capable de respecter ses aïeuls comme de s'en démarquer. L'identité prononcée de ce second album est sa deuxième plus belle qualité, la première étant son mérite de ne pas avoir sombré dans un délire technico-Djent jazzy alors qu'il était extrêmement facile de céder à ces sirènes et que le Death Metal d'Age Of Disgrace n'avait pas totalement refermé cette porte de secours.
J'en ai désormais le cœur net : PESTIFER n'est pas un groupe de transition, pas un groupe de compromis. En tout cas, pas au sujet de l'intensité et de la virilité de son Death Metal, qui se permet quelques écarts techniques en maintenant le voltage rythmique institutionnalisé par la génération d'avant. En découle un album qui dérouille sévère, sans prise de tête, avec une fois encore (ça commence à devenir une habitude maintenant avec eux), tout ce qu'on recherche de puissance et de créativité dans un album de Death Metal pestiféré jusqu'à l'os.
Ajouté : Dimanche 09 Août 2015 Chroniqueur : Stef. Score :     Lien en relation: Pestifer Website Hits: 5902
|