# 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
}
REVENGE (ca) - Scum.Collapse.Eradication (2012)
Label : Osmose Productions
Sortie du Scud : 20 février 2012
Pays : Canada
Genre : Black Metal
Type : Album
Playtime : 8 Titres - 36 Mins
Je pense que vous l’avez compris depuis longtemps. En tout cas si vous êtes un/une habitué(e) de notre webzine.
Et sans tomber dans l’auto commisération ou la mise en avant qui n’a pas lieu d’être, je suis d’accord avec vous. Je suis un peu la Brigitte Bardot de Metal-Impact.
Le défenseur des causes perdues. Le havre de paix des chiens abandonnés, des chats galeux, des parias, la mission locale des moins que rien.
Alors de fait… Le truc trop sucré, le machin incompréhensible et inclassable, le bousin en marge et inécoutable, c’est souvent pour moi. Et non seulement je ne m’en plains pas, mais je revendique cet état de fait. J’aime l’inconséquence, j’adore l’anecdotique, je vénère l’improbable.
Si vous parcourez régulièrement ces colonnes, vous aurez aussi assimilé le fait que certains de mes prédécesseurs ne portaient pas forcément les Canadiens de REVENGE en haute estime. C’est un choix que je respecte, et nombreux sont les critiques actuels à régulièrement descendre la production de ce duo de l’impossible, pour cause d’incompatibilité de points de vues musicaux. Et je le comprends aussi, au regard du caractère intrinsèquement ultime et sans compromis de leur œuvre.
Oui mais voilà. Si j’avais été chroniqueur dès les années, 80, j’aurais été le même. J’aurais défendu les WHERMACHT, CRYPTIC SLAUGHTER, BATHORY, HELLHAMMER, MAYHEM, et tout plein d’autres héritiers des Dalton. Du genre de ceux qui dégainaient plus vite ou plus mal que leur ombre. Et depuis, des hordes de ces malfaisants se sont succédées.
Et je suis là pour les défendre, corps et âme…
Cette chronique s’adresse autant aux fans qu’aux néophytes. Alors par respect pour ces derniers, il me faut me livrer à l’art périlleux de la description. Ce qui, dans le cas de REVENGE demande des trésors d’exactitude.
De la concision.
REVENGE est au Black Metal ce que GORE BEYOND NECROPSY est au Grind Core. Sa forme la plus extrême, la plus absolue, la plus soumise à l’éthique du non sens justifié. REVENGE est un parangon, un épitomé, une épiphanie. Le mal à l’état pur, le chaos dans son élément naturel d’incompréhension, en un mot, le bruit.
Mais attention, et je me dois là de préciser quelque peu la pensée de certains de mes confrères. REVENGE est tout sauf le groupe le plus bruitiste du monde. A ce petit jeu, ils sont largement battus par certains ensembles de Noise Core justement, d’autres groupes de Black à la démarche encore plus soutenue, et même par des groupes de Dark Ambient particulièrement malsains.
Mais l’attitude des Canadiens trouve son essence dans l’art de la répétition et de la négation de la modulation. Car depuis leur émergence en tant qu’entité viable, leur chemin n’a pas changé de cap, et leur credo n’a pas varié d’un iota.
L’agression, coûte que coûte, au détriment de la cohérence, de l’innovation.
Nous sommes loin du brouet infâme et puant que certains ont pu se plaire à décrire. Et Scum.Collapse.Eradication bénéficie d’une production adaptée à son contenu, tout à fait supportable. Ce que cet album confirme par contre, s’il en était besoin, c’est que les critères esthétiques et « musicaux » de REVENGE ne changeront donc jamais.
Sempiternelle pochette noire et blanc à boite crânienne, sempiternels morceaux à base de hurlements stridents, de borborygmes nauséeux, de guitare rythmique répétitive et de lead inconcevables harmoniquement, et de batterie fracassée et irrégulièrement supersonique.
Et c’est cette constatation qui m’amène à ce postulat indéniable.
REVENGE est plus qu’un groupe. C’est un concept.
Le concept de la monomanie misanthropique. Ou de la misanthropie monomaniaque. C’est selon. Car – et il m’est impossible même avec la pire des mauvaises foi de nier cette affirmation – REVENGE propose depuis ses débuts le même album, avec le même conditionnement, en revendiquant bien haut de par leur refus de la moindre modulation ce caractère outrancièrement itératif.
REVENGE, c’est la galerie des glaces, la métonymie ultime et l’affrontement du contenu et du contenant dans un clash apocalyptique. Presque un tic de langage.
Car si vous aimez le premier morceau de cet album, alors vous aimerez les sept autres. Et si vous aimez le premier album des canadiens, vous aimerez le reste de leur production. C’est ainsi.
On ne peut parler ici de nihilisme, car ils croient en ce qu’ils font, même si c’est une manière détournée de ne croire en rien. Et c’est admirable, comme toute tentative dérisoire de fuite en avant et de refus de la normalité.
Et si musicalement, même si le terme n’est pas forcément idoine, Scum.Collapse.Eradication ressemble à une mixture compacte de Noise Core et de Raw Black Metal, le mélange est quelque part séduisant. Un peu comme si les deux premiers CARCASS percutaient de plein fouet un vieux BLASPHEMY. Mais rien de plus.
Et rien de moins par extension.
Alors vous voilà prévenu(e)s maintenant. Car cette chronique est sans doute la plus honnête description que vous pourrez trouver de REVENGE. Rédigée par un esthète de la laideur et du bruit.
Et je dirais mieux. Si un jour Mille Petrozza a chanté « Love Us or Hate Us », il prédisait tout simplement ce genre de déflagration.
Car avec REVENGE, il n’y a pas d’autre choix.
Ajouté : Mercredi 12 Décembre 2012 Chroniqueur : Mortne2001 Score : Lien en relation: Revenge Website Hits: 10776
|