# 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
}
DEVIL IN ME (pt) - The End (2012)
Label : GSR Music
Sortie du Scud : 24 février 2012
Pays : Portugal
Genre : Punk / Hardcore
Type : Album
Playtime : 12 Titres - 34 Mins
« Devil In Me », « Devil Inside », tout ça, ce sont les mêmes conneries. De vieilles marmites éculées et trouées dans lesquelles mijotent des histoires de possession. Mais je crois que le Diable ne se cache pas à l’intérieur de ceux qui pensent être pour Lui un hôte. Ainsi, les coreux de DEVIL IN ME, sous leurs nombreux tatouages et leurs tops COMEBACK KID cachent en vérité une laine d’agneau. De gros durs au cœur tendre, pas forcément inoffensifs mais suffisamment éduqués pour ne pas verser dans le Hardcore maladif et négatif. Et la croix renversée qui orne le verso du booklet ? De la symbolique de supermarché. DEVIL IN ME c’est du Hardcore portugais nourri au NYHC mais débité à une cadence aussi moderne que malhabile. Les âmes hostiles se frottent les mains. Avec The End, c’est de la chair à saucisse qui leur tombe toute cuite dans la bouche. Car cet album, leur troisième, se prend les pieds dans toutes les carpettes. Ouais gros !
Andrew Neufeld de COMEBACK KID était probablement le seul cinglé à bien vouloir poser son blaze sur ce disque en le produisant. Il parait que The End saura également toucher les fans de SICK OF IT ALL. Dans leur fierté peut-être. Car les frères Koller n’auraient jamais approuvé un travail aussi brouillon. Du ressassé de New-York Hardcore ? Oui, il y a de ça. Mais la dominante principale s’inscrit plutôt dans des tons Hardcore moderne grossièrement coupé au Punk. Le problème, c’est que si DEAD SWANS, 50 LIONS ou DEEZ NUTS affichent encore une certaine lourdeur et une originalité plus ou moins consistante dans leur musique, celle de DEVIL IN ME souffre clairement de sa platitude. The End sent le frigo mais procurera probablement un minimum de satisfaction et quelques sensations fortes à ceux qui ne s’attendaient pas à mieux. J’ai très vite surestimé cet album, espérant un retour à la raison et à la période MADBALL de leurs débuts. Rien n’y fera. Les Lusitaniens se sont définitivement tournés vers le Hardcore de COMEBACK KID, décalquant leur jeu de batterie tribalo-Punk, y ajoutant des distorsions à l’américaine, des chœurs scandés à la SICK OF IT ALL, le tout ficelé dans un emballage hermétique dont les couleurs chatoyantes et les contours de bande-dessinée attireront l’œil de ceux qui trouvent la pochette du dernier MORE THAN A THOUSAND magnifique. En réalité, The End ne présente que peu d’intérêt musicalement. La très désagréable sensation d’avoir déjà entendu cet album arrive rapidement, ce qui est de loin un mauvais signe. La participation d’Andrew Neufeld sur « The Fall » est vraiment une sucrerie qui rattrape un peu la fadeur de ce disque, puisqu’elle découle sur une composition franchement entrainante et bien écrite. Idem pour « Claim My World » sur laquelle on retrouve la patte de Mike Ghost, avec en prime un groove non négociable. DEVIL IN ME est donc franchement capable de réaliser de bonnes choses. Malheureusement, les trois quarts des morceaux font remplissage, avec très peu d’inventivité dans les riffs, des rythmiques branchées sur l’électrocardiogramme de Jean-Luc Delarue et un chant rugueux qui devient très vite pénible à supporter. Au-delà de tous ces aspects technico-techniques, on félicitera quand même la très grosse débauche d’énergie de ces mecs, même si l’inverse aurait été le clou qui scelle le cercueil.
J’ai très peu d’espoir donc pour ces Portugais qui proposent avec The End une sortie vraiment moyenne, dynamique certes, mais trop irrégulière pour venir concurrencer leurs modèles d’outre-Atlantique. Ce n’est pas une question de philosophie mais de capacités. Celles de DEVIL IN ME sont encore trop teintées de maladresse pour parvenir à affirmer le groupe au cœur même de la cour dans laquelle il veut jouer. Faire ses preuves en Europe sera déjà un bon début avant de venir se la jouer Gangsta Hardcore.
Ajouté : Vendredi 14 Septembre 2012 Chroniqueur : Stef. Score : Lien en relation: Devil In Me Website Hits: 7650
|