# 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
}
DARKTHRONE (no) - The Underground Resistance (2013)
Label : Peaceville Records
Sortie du Scud : 25 février 2013
Pays : Norvège
Genre : Punk Black Metal
Type : Album
Playtime : 6 Titres - 42 Mins
Il y a des choses plus faciles dans la vie que d’enchaîner la chronique du dernier Steven Wilson et la chronique du dernier DARKTHRONE. Par exemple, convaincre Gérard Depardieu de « j’aimer » la page Facebook de Wattwiller. Ou bien encore persuader Walter Spanghero d’être bien plus à cheval sur l’origine de sa viande. Tout un tas de trucs simples comme bonjour. Mais merde, évoquer le seizième album studio de ce groupe qui représente un culte absolu pour tout fan de Black Metal, l’analyser avec justesse quand A Blaze In The Northern Sky ou Under A Funeral Moon ne vous évoque rien de plus qu’une vieille caricature du début des années 90, le disséquer sans oublier de prendre en compte le passé récent et controversé du duo, c’est un défi qui n’était pas vraiment dans mes cordes. Sauf que comme eux, je n’en fait qu’à ma tête et je vous emmerde. En toute honnêteté, avouez que c’est cette naturelle absence de complexes qui plait autant qu’elle divise. Ces mecs sont définitivement trop intelligents pour jouer sur un mythe peinturluré vieux de vingt ans (un choix qui ne convient pas à tous surtout depuis ce virage Heavy punkoïdal). Alors ils lancent de fausses pistes.
Comme cette pochette, esquisse d’un retour à la normale signée de l’excellent Jim Fitzpatrick, grand couturier de la maison THIN LIZZY. Une entourloupe de plus après les covers cradingues des trois derniers albums. Mais le plus enrichissant demeure à l’intérieur du boitier. Pour être franc, j’ai trouvé The Underground Resistance très incohérent, pour ne pas dire totalement débile. Avec le recul, je pense que comme beaucoup, j’ai marché dans le discret caca fumant concocté par Fenriz et Nocturno Culto et que le duo jubile de nous la faire à l’envers. DARKTHRONE en est arrivé à un stade où ils se foutent de tout, du ridicule, du plagiat, des standards, du qu’en-dira-t-on. Et ce qui est le plus intéressant dans cette œuvre, c’est justement qu’elle n’est pas un vrai album de DARKTHRONE, dans le sens où elle se contente d’une succession d’influences divers et variées. Stylistiques d’abord, balayant le Crust, le Punk, la NWOBHM. Nominatives ensuite puisqu’on retrouve dans le désordre du CELTIC FROST, MERCYFUL FATE, KING DIAMOND, BLACK SABBATH, AGENT STEEL, HELLOWEEN (pour les envolées vocales grandiloquentes) ou BATHORY / WINDIR (pour l’esprit Viking conquérant de « Valkyrie »). The Underground Resistance semble déjà prendre ses distances d’avec l’ère F.O.A.D qui, elle-même, s’éloignait des racines du groupe. Autant dire qu’il n’y a plus grand-chose qui relie cette œuvre à DARKTHRONE. C’est un foutoir total, quelque chose de très désorganisé avec un Nocturno Culto qui adopte des timbres vocaux totalement fantaisistes (j’en veux pour preuve « The Ones You Left Behind » avec cette narration théâtrale façon ICS Vortex dans sa période ARCTURUS, album La Masquerade Infernale pour être précis). Il y a aussi « Leave No Cross Unturned », un enchevêtrement grotesque de riffs casse-gueules, de rythmiques punks, d’envolées lyriques avec les « r » qui roulent, le tout durant quatorze minutes, une première dans leur histoire. C’est très peu lucide musicalement, mais c’est le reflet de ce m’enfoutisme monumental qui habite nos deux compères, à mon avis davantage obsédés par le second degré que par l’intégrité. C’est une opinion qui n’engage que moi. S’il ne fallait retenir qu’un seul point positif de cette œuvre très astucieuse mais qui, paradoxalement, n’en possède pas beaucoup, je citerais sans hésiter cette puissance dans le riff. DARKTHRONE a toujours su faire exploser son riffing, sublimer ses guitares et aujourd’hui encore, grâce à une production étonnamment boostée, ça reste une qualité qui prédomine au cœur de The Underground Resistance. En terme de technique, c’est bien la seule.
Car il apparaît comme une évidence qu’après un quart de siècle d’activité, DARKTHRONE n’a plus rien à prouver ni même à vendre. Le duo approche doucement de la préretraite et a fait le choix (discutable, peut-être) de s’éclater, de profiter de ses vieux jours en continuant à envoyer chier le monde, comme il l’a toujours fait. The Underground Resistance est loin d’être un grand album, mais il a le culot de faire ce qu’on n’attend pas de lui, de toujours provoquer, envenimer la situation, banaliser une vie de déchéances. Un peu rebelle, un peu marginal mais surtout bourré d’hommages et d’autodérision, ce seizième opus est un coup de pute jubilatoire.
Ajouté : Mercredi 06 Mars 2013 Chroniqueur : Stef. Score : Lien en relation: Darkthrone Website Hits: 8372
|