# 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
}
NVRVD (de) - Coma (2013)
Label : Hummus Records
Sortie du Scud : 1er juin 2013
Pays : France
Genre : Post Hardcore
Type : EP
Playtime : 6 Titres - 22 Mins
Forcément, quand tu choisis d'intituler ton EP Coma, tu génères une attente. Les Allemands de NVRVD ont été plus malins sur ce coup. Principalement connu pour avoir tapé un split avec les Suisses de COILGUNS, le trio teuton n'est pas qu'un concentré putassier de bleusaille flirtant avec quelque chose de très à la mode : le Post-Hardcore. Abandonnant volontiers ses aspérités Crust au profit d'une musique moins instinctive, le projet ne perdra rien au change. Pas cette fois. Depuis bientôt dix ans, les énervés de NVRVD, contraction primaire de Nevervoid, officient dans ce Metal sombre et torturé qui triture la pensée humaine, la conditionne, la façonne, pour n'en faire qu'un sujet d'avilissement. Et Coma ne sera guère un renouveau mais tout juste un très léger virage artistique qui mérite bien, lui aussi, son quart d'heure de gloire universel. Ils sont nombreux à y prétendre mais rares à le mériter. Eux le méritent. Il suffit de voir leurs tronches pour s'en convaincre.
Composé dans le trou du cul du monde, à Oberohe (Basse-Saxe), sorte de Creuse allemande qui donne même du fil à retordre à Booking.com pour y dénicher un hôtel et pas une gargote, Coma porte bien mal son nom. A l'issue de l'expérience, ce n'est pas sous respiration artificielle ni même dans un quelconque état comateux que l'on se trouve mais plutôt dans une sorte de no man's land cérébral. On est conscient, conscient d'avoir pris un gros coup de poing dans le ventre, groggy également, mais certainement pas coupé du monde. Le regard vide et inexpressif, parce que des compositions comme "Oberohe" qui touche un peu au Post-Black Metal, "Niederohe", à la fois village mitoyen et conclusion épique ou encore la subtile "Impartial Eyes" viennent de faire effet. Des relents Crust, oui, il y en a. Encore une fois, ce mélange finaud de mathématiques et de bestialité, cette boucherie un peu binoclarde, cette autopsie en gants de velours est à la mode et on ne sera donc pas étonné de retrouver en NVRVD un peu d'originalité, tout du moins du chaos. Post-Hardcore chaotique. Le mot est lâché comme une balle à pointe creuse qui parvient à entrer mais pas à sortir de la boîte crânienne. Les frères Braunschmidt (respectivement Christian à la guitare et Stefan à la basse) distillent une panoplie de notes écorchées vives qui savent exprimer la douleur ("We Are") tout en restant dans le délire j'suis-jeune-et-j'me-prends-pas-trop-la-tête-non-plus. A chaque morceau son apparence, sa silhouette. Et si le cœur de l'EP est plus expéditif sur la forme, ce n'est que pour mieux retenir l'embrassade effectuée par le placement initial et final du duo "Oberohe / Niederohe", qui semble clamer à la fois le désespoir d'être seul dans ce lieu extrêmement reculé mais également le côté inspirant, spirituel de la chose. Je n'ai aucun doute sur le fait que Coma n'est pas cette machine à tubes Post-Hardcore qui te donne envie d'en reprendre encore et encore. Au contraire, il y a un sentiment d'écœurement assez poignant et en cela, je pense que NVRVD a tenu son pari.
Il en va donc de votre santé. Un simple regard posé sur leurs visages suffit à vous faire comprendre que tout cela n'est pas bien méchant. Et pourtant, c'est un tout autre scénario qui se développe au fil de cet EP, convaincant, certes, mais avec les lacunes inhérentes à ce style qui n'a jamais trouvé de définition valable. Ce début de schizophrénie augure éventuellement le meilleur, probablement le pire.
Ajouté : Dimanche 23 Février 2014 Chroniqueur : Stef. Score : Lien en relation: Nvrvd Website Hits: 5670
|