# 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
}
BORN FROM PAIN (nl) - Survival (2008)

Label : Metal Blade Records
Sortie du Scud : 3 novembre 2008
Pays : Pays-Bas
Genre : Hardcore
Type : Album
Playtime : 11 Titres - 34 Mins
Diantre ! Déjà onze ans que nos affreux larrons de BORN FROM PAIN nous exposent leur vision bien personnelle de la quiétude et du sentimentalisme via une fréquentation conséquente des studios. Et puisqu’il est bien connu que l’occasion fait le larron, les hollandais profitent de la légitimité de cette maxime pour une fois encore, nous faire une nouvelle offrande qui sent bon le sable chaud de Waikiki. Non j’déconne ! Pour la énième reprise, ce sera plutôt les vapeurs des canons et l’odeur de chair brûlée sur l’asphalte (une référence à RAMMSTEIN ? Ou ça ?) que nous inhalerons par le biais de Survival. Fidèle à ses fondements, la formation emmenée par le bon Rob Franssen (chant) fais à nouveau dans le politiquement engagé avec un artwork abusivement bourré de symboles (Ouroboros, l’œil dans le triangle, un crâne dans un soleil). Libre à chacun de parvenir à isoler un message pour par la suite s’en faire sa propre interprétation. Mais vu que trop de symbologie tue la symbologie et que je n’ai pas la fibre déductive d’un Robert Langdon (bien que je m’améliore en suivant assidument ses aventures fantasques, la preuve ; je peux deviner avec aisance que « luciole » est une anagramme de « couille »), je m’abstiendrais d’un quelconque jugement. La seule chose que j’oserais affirmer avec assez de certitudes pour être crédible, c’est que Survival semble être construit dans la parfaite continuité de War, avec la guerre et ses conséquences comme thème principal.
Ce qui n’était à la base qu’une simple hypothèse (créditée par la vision des membres de BORN FROM PAIN vêtus comme des guérilléros sur la pochette) se retrouve bien vite confirmée avec l’introduction de « Sound Of Survival ». Des bruits de circulation, d’hélicoptère, de tirs de rockets suppléés d’une sirène de guerre et c’est la confusion qui règne. La vérité est incontournable, le décor est planté. On est plongés en période de conflit. La chanson à proprement parler démarre sur un tempo effréné et se retrouve très vite décorée avec la nouvelle voix des hollandais. Rob Franssen, dans un rôle inédit impose un hymne au rythme du morceau, « this is the sound of survival ! ». Une tonalité encore inexplorée et novatrice pour quiconque connaissais la linéarité de l’ex-brailleur, Ché Snelting. Ici, Rob assure une ligne de chant d’un niveau tellement amateur que ça en ferais presque un atout. Nul doute que ce choix sera décortiqué, jugé, critiqué, encensé ou désigné comme unique responsable de l’éventuelle chute de BORN FROM PAIN. De mon côté, cette facette plus abordable, « compréhensible » et clean mêlé à l’essence même d’un chant 100% Hardcore ne m’a pas spécialement rebutée. Peut-être justement trop maquillée par le quasi-sans-faute exécuté instrumentalement sur ce début de disque. Il n’empêche que Survival possède ses titres qui ramonent secs comme par exemple l’énormissime « Sons Of A Dying World » ou « The Wolves Are Loose » et son leitmotiv teinté de sonorités orientales. Je vous parlais avant d’idées engagées. Aucune composition n’aurait pu plus abonder en ce sens que « Final Collapse ». L’avant-propos nous propose une réflexion sur l’armement lourd avec un extrait du discours de Dick Cheney (futur ex-vice président des Etats-Unis) sur la publication du « Project For The New American Century » (visant à faire la promotion du « leadersheap » étatsunien mondial) à l’appui. Au passage, ce projet fut à l’origine de bon nombre de décisions du gouvernement américain au sujet de la guerre en Irak. On connaît le résultat. Mais c’est une autre histoire. Le morceau en lui-même est accrocheur, violent et évidement très impliqué tant au niveau du sujet que de sa structure. Il s’achève avec un après-propos plus énigmatique, visiblement constitué d’un enregistrement d’un officiel allemand dans des conditions précaires. Fin de la parenthèse politique, simple constatation que les Bataves ne font pas les choses à moitié. Ils se calment néanmoins nettement par la suite, préférant exceller dans l’art de s’inspirer librement de références comme SLAYER (assez frappant sur « Zeitgeist ») que dans celui de diffuser des samples provocs à la pelle. L’épreuve de survie s’achève presque dans l’indifférence avec « Under False Flag », sa cadence lourde à mourir et son final groovy. Simplement le temps de noter qu’avec le cumulé des intros, outros et autres extraits, on atteint la faible bagatelle de trente petites minutes de Hardcore pur. Le plus pur soit-il, cette durée est susceptible d’en laisser quelques uns sur le carreau. A ce niveau, j’en attendais quand même plus.
Une trop courte durée qui ne gâche néanmoins strictement rien au plaisir absolu que j’ai eu à découvrir le dernier bébé de BORN FROM PAIN. Et si en plus il défend une noble cause et qu’il est musicalement très réussi, la soirée aura été aboutie. Nouveau chanteur, mêmes résolutions, les hollandais appuient la où ça fait mal et ne m’ont jamais parus aussi inspirés. Déplaisant ou pas, le constat sonne comme une évidence, il faudra compter sur BORN FROM PAIN quand il s’agira de porter un regard dur et des paroles acerbes sur ces grands esprits qui nous dirigent. « Quand j’étais petit garçon, j’me foutais d’la blanche Maison, en chanson. »
Ajouté : Mercredi 12 Novembre 2008 Chroniqueur : Stef. Score :     Lien en relation: Born From Pain Website Hits: 13547
|