# 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
}
GODISDEAD (FRA) - II (2012)

Label : Auto-Production
Sortie du Scud : 31 juillet 2012
Pays : France
Genre : Stoner / Punk / Black Metal
Type : Album
Playtime : 10 Titres - 46 Mins
GODISDEAD aurait pu se limiter au vieux stéréotype black métalleux prônant "l'annihilation de toutes religions" ou alors utiliser les clichés du Punk canin pour générer des hordes de bâtards sanguinaires. Ou encore se fumer un bon oinj en saupoudrant délicatement du Stoner sur la surface de sa musique nauséabonde. Mais c'est un peu facile, même si on ne devine rien d'autre à leur sujet au premier regard. L'idéal serait de se poster sur la pointe des pieds pour tenter de voir un peu plus loin que le simple horizon. Car GODISDEAD est surement beaucoup plus énigmatique qu'il n'y parait et ma foi, avec ce second album intitulé II (puisqu'il succède à un full-lenght éponyme paru en décembre 2010), le quatuor le démontre suffisamment. Bougies, crânes, sang du Christ et pentagrammes sont érigés en symboles médiocres, mais la vérité est ailleurs.
GODISDEAD transpire d'une sueur âcre et brulante, saigne d'un sang visqueux et impie. Les deux fluides se rencontrent, se mêlent, se consument et forment au bout du cycle, le fuel primaire de cet opus. Rien ne saurait mieux dégouliner de la surface crasseuse de "Lucifer". La lumière, la liberté, la vérité. Criez le nom de Lucifer, car lui seul sait comment se débarrasser de ce Stoner hyper-protéiné et crade comme un slip d'Emile Louis. Les gesticulations Punk rappellent sur la forme KVELERTAK en moins coloré. En plus sombre. Car II est incroyablement sombre. Visuellement, musicalement. Un océan de noirceur trahi par des textes profondément négatifs qui se greffent sur des structures poisseuses. On ne sait pas trop d'où sort l'inspiration, ce qu'elle envisage de faire, la façon dont elle manipule l'esprit intègre (je n'en doute pas) des musiciens. Mais elle est là, elle rôde comme une âme tourmentée, au détour de l'incompréhensible "Fenrir's Tribe" sur laquelle Alex (basse et chant) s'offre le luxe de trois minutes d'un monologue épuisant de simplicité. Constamment, GODISDEAD prend le contrepied de la logique humaine, fixant l'idée que l'excentricité est un concept qui paie. Oui, il paie dans la mesure où cette rondelle innove, instaure un climat détestable, une ambiance puante qu'on a honte d'aimer comme on a honte d'aimer la sensation de l'excrément encore chaud sur la peau des couilles. S'autorisant quelques montées dans le Heavy, comme pour rendre le tout encore plus lourd et space, le quatuor passerait presque pour un intellectuel proférant la vérité sous Lexomil si son fond de commerce n'était pas aussi stéréotypé. Il est facile pour quelqu'un qui est sain d'esprit de passer pour un imbécile. L'inverse est beaucoup moins vrai et dans le cas présent, je suis convaincu que ce besoin de décadence et de simplicité primitive (contredite par exemple par la technique de "Follow The Wake Part. 2") est d'une naïveté traître puisque la frontière vers la démence n'est jamais profanée.
Néanmoins, il y a une identité, une osmose, et comme à chaque fois qu'un univers pénétrant interfère entre la musique et l'auditeur, il convient de le souligner. II n'est vraiment pas l'album qui paie de mine et il ne tient qu'à vous de me croire sur parole, mais l'expérience est très intéressante. Ne leur déplaise, Dieu seul sait à quel point la saleté convient à l'Homme moderne, qui pourra enfin re-gouter à la douceur du liquide amniotique au travers de cette œuvre.
Ajouté : Mercredi 30 Juillet 2014 Chroniqueur : Stef. Score :     Lien en relation: Godisdead Website Hits: 7320
|