# 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
}
NAILS (usa) - Abandon All Life (2013)

Label : Southern Lord Records
Sortie du Scud : 28 mars 2013
Pays : Etats-Unis
Genre : Crust Hardcore
Type : Album
Playtime : 10 Titres - 18 Mins
Imaginez la scène. Vous êtes attablé, avec quelques amis pour un bon repas, et l’un d’entre prend tout à coup la parole, brièvement, mais d’une voix assurée qui ponctionne vingt pour cent d’audition de l’oreille gauche de ses deux voisins. Puis plus rien. Et trois heures plus tard, le voici qui répète la même chose, de la même façon, en faisant perdre cette fois ci trente pour cent des capacités auditives de ses proches. Vous visualisez ? Vous pourriez presque l’entendre ?
Et bien bravo. Vous pouvez alors sans conteste évaluer la performance de NAILS qui en trois ans, vient de sortir pratiquement le même album. Un album de moins de vingt minutes, concis, imparable, mais similaire dans le fond et la forme.
Alors de deux choses l’une. Ou vous vous sentez concerné par leur discours et tout va bien, vous êtes heureux et pouvez attaquer la prune, sinon, mettez des boules Quiès ou collez une bonne bouffe à l’ami aux saillies tonitruantes.
Vous êtes encore là ?
Tant mieux, on va pouvoir gueuler un peu.
22h45, n’importe ou en France, Jean Louis se réveille soudain et lève le nez de son assiette (il est un peu autiste).
« VOUS AIMEZ LE HARDCORE QUI TIRE SUR LE D-BEAT AVEC DES INFLUENCES CRUST ET GRIND ?? NON, PARCE QUE SI OUI, ECOUTEZ LE DERNIER NAILS IL EST D’ENFER !!!! » (Slurp, crotch, il finit son mijo vin avec un bout de baguette rassis).
Mais Jean Louis, sous un aspect un peu benêt tirant vers le laisser aller intellectuel, est un esthète de la bourrinade savante. Il sait de quoi il parle lorsqu’il évoque le nom de NAILS. Il sait aussi que si Abandon All Life est quasiment le copié-collé de Unsilent Death, c’est parce que les ricains maîtrisent leur style avec panache, et qu’ils ne ressentent pas le besoin d’expérimenter à tout va. Et de plus, il comprend et accepte la durée limitée des deux efforts (on gagne deux minutes cette année, au bout de vingt ans de carrière, NAILS finira par faire un album à la durée raisonnable). Il sait qu’au-delà, la musique serait difficilement supportable à cause de son caractère extrême et sans compromis. Et de sa linéarité de surface. Mais quand même. J’admets que NAILS appuie la plupart du temps sur la blessure pour accentuer la souffrance, mais il faut reconnaître qu’ils savent aussi de temps à autres (mais rapidement car sur dix sept minutes, il n’y a pas vraiment de quoi finasser des heures…) ralentir la cadence infernale pour se vautrer dans des pièces au doux relents Death que SUFFOCATION a souvent répandues par le passé. Et dans ces cas précis, ça donne un pachydermique « Wide Open Wound » (quand je vous disais qu’ils aimaient bien appuyer sur les plaies…), qui distille un riff lourd de sous entendus sur fond de tempo écrasant, ou un final « Suum Cuique », dont l’ouverture rappelle les grandes heures du regretté DARK ANGEL, avant de sombrer dans un discours sombre, pesant qui laisse l’auditeur sur une impression bizarre, comme si le message passé était ambigu… Un goût amer en quelque sorte.
Entre temps, des tueries en règle dont la plus longue atteint à peine les deux minutes, genres d’intermèdes principaux dont le but avoué est de propager une onde de choc si énorme que vos enceintes tomberont en pièces. Car bien sur, outre la puissance indéniable de la musique, il faut souligner le caractère parfait d’une production qui permet à la boucherie de tourner à plein régime.
NAILS.
Comment mieux mériter son nom.
Car après tout. Imaginez que vous ayez deux mains gauches et que vous tentiez de planter un clou pour accrocher le splendide cadre abritant cette sémillante photo de tête de biche sur fond de coucher de soleil dans le Tarn. Vous positionnez le clou sur le mur, et vous frappez un grand coup… Sur vos doigts.
Vous hurlez, vous effritez le mur et le laissez avec un énorme trou, puis vous vitupérez avant de latter tout ce qui passe à votre portée.
C’est ça l’effet NAILS.
Ajouté : Mercredi 28 Août 2013 Chroniqueur : Mortne2001 Score :     Lien en relation: Nails Website Hits: 10652
|