# 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
}
WITHDRAWAL (au) - Undiluted Fervour (2016)

Label : Auto-Production
Sortie du Scud : 12 novembre 2016
Pays : Australie
Genre : Hardcore
Type : EP
Playtime : 6 Titres - 16 Mins
"Today, after months of hard work we are so incredibly proud to present to you in full our completed EP Undiluted Fervour. This work is the culmination of so many efforts, setbacks, pracs, rewrites, and demos that we'd need to write a novel to document them."
Si l'on s'en tient à la présentation qu'en font ses fondateurs, WITHDRAWAL est un projet de Hardcore Mélodique. De mon point de vue, ces deux mots sont antinomiques. Il ne peut pas y avoir d'intégristes modérés, de vegan carnivores, de politiciens sincères, de Hardcore Mélodique. Pour rappel, le courant originel Hardcore est né dans les banlieues américaines au début des années 80 en réaction à la boboisation de la scène Punk. Ce Hardcore n'est que violence, rage, cris, guitares maltraitées et hymnes enragés pour faire saigner le pit. Si ces aspects ne sont pas toujours perceptibles dans la scène actuelle qui en a gommé la rugosité, notamment en y ajoutant une bonne dose de Metal, le Hardcore demeure un cri de douleur craché à la gueule du monde par une jeunesse en manque de repères. Si vous trouvez que nous offrons plus de repères à notre jeunesse aujourd'hui qu'il y a trente ans, des projets HxC émergents sont là pour nous rappeler qu'il n'en est rien. La révolte gronde toujours dans les paisibles banlieues des métropoles.
Originaire de Balarat, une banlieu éloignée de Melbourne, WITHDRAWAL est un projet australien de Hardcore, c'est indéniable. J'en veux pour preuves l'aspect rugueux et brut de fonderie des compos, le chant rageux, les lyrics (un peu) engagés, la production organique et la réalisation do it yourself .Undiluted Fervour est le debut EP du gang
Il se présente habillé d'un artwork assez terne, peut-être bricolé pendant de longues heures sur Photoshop. Le fonds représente un bouquet de fleurs pris en très gros plan, mais en nuances de gris et de flou. Là-dessus se pose le nom du groupe en lettrage BATHORY ultra convenu et la silhouette d'un homme poisson empruntée au bestiaire du peintre Hieronymus Bosch ou peut-être à l'univers cauchemardesque de H.P Lovecraft. Il y a aussi une montre de grand-père, une sorte de fresque végétale et le soleil. Voici un artwork qui semble cacher un message.
La musique du combo n'est pas aussi brut que le Hardcore originel. Il y a une bonne dose de Metal dans le cocktail, aussi bien dans la rythmique que dans les tempos, plutôt medium, des six chansons. Pas de soli, pas d'instru planants, WITHDRAWAL, c'est du collectif. Gros riffs évidents, guitare lead un petit peu mélodique (d'où l'appellation Hardcore mélodique, je suppose) et chant hurlé parfois doublé en chant clair, avec une élocution bien détourée, permettant de comprendre les paroles. Celles-ci sont justement le point fort du projet. Les lyrics ont un côté autobiographique touchant laissant entrevoir une existence pas vraiment rose et un mal de vivre juvénile. Les compos sont variées et alternent les ambiances, du plus brutal ("The Pull" ou "Strokes") au plus cool ("Clipping" ou "Contemptuous Habitat").
Plutôt bien produit et correctement mixé pour du DIY, ce disque est techniquement bien foutu. Malheureusement, il ne dégage pas grand chose. C'est assez convenu, pas vraiment original, et rien ne se dégage du lot. Aucune chanson particulièrement marquante, aucun climax. La ferveur a beau ne pas être diluée, le breuvage manque cruellement de corps.
Il y des maladresses et des approximations dans ce projet, des non dits, des choix artistiques discutables. Mais il y a aussi beaucoup de boulot, comme l'atteste le petit paragraphe d'introduction. Dans le voyage vers la reconnaissance, le chemin du Hardcore n'a jamais été le plus aisé et on peut donc encourager toute nouvelle initiative, même imparfaite.
Ajouté : Dimanche 30 Avril 2017 Chroniqueur : Rivax Score :   Lien en relation: Withdrawal Website Hits: 4278
|