# 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
}
UNDERNEATH THE GUN (usa) - Forfeit Misfortunes (2009)
Label : Ferret Music
Sortie du Scud : 20 janvier 2009
Pays : Etats-Unis
Genre : Deathcore mélodique
Type : Album
Playtime : 10 Titres - 32 Mins
Un de ces quatre, il faudrait que je pense à renvoyer UNDERNEATH THE GUN au service après-vente du Deathcore. Tout se passait plutôt bien au début, ils étaient merveilleusement bien formatés pour rentrer incognito dans la masse. Mais voilà qu’au lieu de nous parler de la violence, des problèmes de la société actuelle, de leur haine pour les croyances en tout genre, nos cinq amis américains nous pondent une disserte sur… Dieu. Mais je pense sincèrement que le service après-vente va m’envoyer bouler, puisqu’il parait que c’est intentionnel. A mes yeux, ce trip là est à peine plus ridicule que ceux qui nous gavent avec leur Satan aux noisettes. Pourtant, ce projet remonte à la plus tendre enfance des musiciens, puisque les prémices d’UTG ont germés dans leurs esprits quand ils n’avaient encore que… 12 ans. Prophètes et précoces, donc ! Pas besoin de vous faire un dessin, les membres sont donc extrêmement jeunes et labellisés « 100% MySpace ».
Mais le contenu de Forfeit Misfortunes, second essai après The Awakening (qui n’en était pas un) en 2006, ne s’illustre qu’au niveau des lyrics. Malheureusement, Harrison gueule tellement fort et faux qu’il est par ailleurs, impossible de décrypter son charabia. Il faut donc être sacrément bien informé pour comprendre le niveau spirituel des paroles. On se retrouve au final en présence d’un vrai Deathcore, reconnu A.O.C d’outre-Atlantique. Seuls sa provenance et ses messages sont nobles. Le reste est un étalage brouillon d’une palette technique hallucinante. Toutes les façons de caresser une guitare sont récapitulées au long de l’opus. Un choix effectué au détriment de l’émotion et de la sincérité puisque les tracks ont une fâcheuse tendance à s’agglutiner autour d’un noyau « riff lead/passage mid-tempo/refrain imparable ». Si ce n’est pas une fin en soi, une carence en limpidité n’est jamais aisée à combler. L’album, d’à peine une demi-heure, mets un temps fou à décoller. Il s’ouvrait pourtant de manière probante avec « Cutting Ties, Breathing Lies » et surtout la magnifique « Reflection Of The Commonwealth » avec son thème mélodique aérien qui vous fera décoller les pieds du sol. Le cœur du compact-disc est plus poussif. C’est à ce moment précis qu’on se perd dans un « dédale-core » mort-né. Rien de nourrissant à se mettre sous la dent, de simples titres comme on en trouve désormais trop. « A Sharp Definition Of Dull » (qui à trop tendance à tirer vers SONIC SYNDICATE en plus méchant), « Pentinence », « No Place For Pardon », autant de compositions qui sont d’un ennui absolu. Les californiens se reprennent néanmoins à partir de « Crescendo » (une instrumentale qui porte bien son nom) pour atteindre un très haut niveau de Deathcore technique sur « Breathing New Lungs ». La dernière piste est un pêle-mêle de variations avec un judicieux passage mid-tempo suppléé de grows astucieux qui tardaient à doubler convenablement les emo-screams d’Harrison. Paradoxalement, c’est la proposition la plus longue qui passe la plus vite.
La parole de Dieu est apriori bonne. L’œuvre des américains l’est un peu moins. C’est avec une facilité toute improbable qu’UNDERNEATH THE GUN passe du jour au crépuscule puis à l’aurore en trente ridicules minutes. Ce n’est toutefois pas un don du ciel. Alors par définition, Forfeit Misfortunes est un disque, certes sexy et très dans le coup. Mais trop fashion pour récolter gloire et succès. Le nom du groupe n’est, pour le coup, plus très judicieux. xXx-UNDERNEATHxTHExGUN-xXx aurait sans doute été plus approprié.
Ajouté : Jeudi 05 Février 2009 Chroniqueur : Stef. Score : Lien en relation: Underneath The Gun Website Hits: 9283
|