# 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
}
WE BUTTER THE BREAD WITH BUTTER (de) - Projekt Herz EP (2012)
Label : Auto-production
Sortie du Scud : 19 décembre 2012
Pays : Allemagne
Genre : Deathcore / Electro / Rock
Type : EP
Playtime : 8 Titres - 26 Mins
Il vient toujours au bon moment, avec ses pains et ses croissants. L’ami du petit-déjeuner, c’est WBTBWB. Vous ne pouvez plus vous cacher. Après bientôt six ans d’existence, WE BUTTER THE BREAD WITH BUTTER est entré dans les mœurs. Vous connaissez peut-être le lien étroit qui me rapproche de ces talentueux allemands mais aujourd’hui, j’ai fait le choix de ne pas me répéter, les reviews de Das Monster Aus Dem Schrank et de Der Tag An Dem Die Welt Unterging étant à votre entière disponibilité pour en témoigner. Depuis leur dernière sortie en 2010, des perturbations sont venues se greffer sur un parcours jusque-là idyllique. Tobi, emblématique chanteur et membre fondateur du projet s’est fait la malle au moment où le duo d’origine est devenu un quintette. Ça, on le savait. Ce qu’on savait moins, c’est que Kenneth Iain Duncan, guitariste rythmique de son état, a également déserté peu avant la sortie de cet EP. Du coup, un brouillard technique s’est posé à l’endroit même où Projekt Herz EP devait rassurer. Visant à préparer la sortie d’un troisième album en 2013, ce nouveau bébé a donc été chié dans la douleur d’une constipation budgétaire, puisque financé par une majorité de fans via Pledge Music.
Changements. Ce mot n’a jamais vraiment cessé de s’entrechoquer dans mon esprit depuis que Max, bassiste du groupe, m’a confié dans l’intimité d’une terrasse strasbourgeoise il y a deux ans qu’évolution il y aurait. Avec la distance, son propos mérite nuance mais respect. Rien de radical. Premier chef d’accusation : le micro. Voilà bientôt trois ans que Paul Bartzsch est au poste (en juin 2013) et jamais encore nous n’avons eu l’occasion de jauger ses performances sur galette. Projekt Herz EP est donc un dépucelage de la plus haute importance. Deutsche Qualität oblige, les beurriers n’ont pas fait n’importe quoi. Sans jamais atteindre la folie d’un Tobi, Paul assure des lignes vocales rigides, profondes qui, ma foi, s’ajustent plutôt bien avec leur nouvelle dimension musicale. Oublié le Schnappi-core enfantin, l’exubérance de claviers pubères, l’explosivité d’un Deathcore teinté de nappes électroniques farfelues et clownesques. WE BUTTER THE BREAD WITH BUTTER est devenu une entité sérieuse et mature. Après une intro plutôt planante (on reconnaît la touche d’un groupe qui fréquente CALLEJON) intervient « 1000 Volt ». Il en manque 99000 pour que Gilbert Bécaud se sente concerné mais pas un seul pour nous plonger corps et âme dans leur univers. Les rythmiques militaires de ce morceau ainsi les claviers subtils mais pas fantaisistes qui jonchent son déroulement sont un premier gage d’évolution. Autrefois véloces et affamés, les teutons s’épanouissent désormais dans un Deathcore aux sonorités Rock et à l’écriture catchy qu’un « Mayday Mayday » un peu kitsch ne manquera pas de souligner. Toujours très trafiquée, cette nouvelle mouture est une émulsion remarquée, pleine de bon sens et d’accroche. Beaucoup plus docile techniquement et surement plus mielleux et accessible pour du WE BUTTER THE BREAD WITH BUTTER, cet EP est un compromis intéressant entre guitares martiales (l’intro de « Soldat » est presque une resucée de RAMMSTEIN période Mutter), chant hurlé avec de vrais morceaux de germanisme dedans et petites mélodies artificielles sucrées et gourmandes. Le tube « USA » rivalise avec un « Euphorie » stellaire et un « Western Beta » qui surprendrait un Sergio Leone devant une plâtrée de spaghettis. Le tout s’emboîte dans une cohérence un peu surfaite mais diablement efficace qui n’égale jamais les figures emblématiques du Metal-fake que sont WE CAME AS ROMANS, ASKING ALEXANDRIA ou ABANDON ALL SHIPS. Et après ça, on en arrive forcément à la conclusion suivante. Quoiqu’ils fassent, les WE BUTTER THE BREAD WITH BUTTER le font sur un nuage.
Il y avait de quoi être chafouin ou déçu. Mais la solidité et la légitimité de Projekt Herz EP qui embarque les Allemands dans un tout nouvel univers seront deux arguments suffisants pour faire taire les débats. Alors certes, WE BUTTER THE BREAD WITH BUTTER n’est pas le groupe que les puristes se mettront soudainement à aduler. Mais l’intégrité qui se dégage de chacune de leurs sorties sera certainement un prétexte valable pour jeter une oreille sur un travail de fond aussi conséquent. C’est trop subtil pour être calculé à des fins commerciales. Laissez-moi, ne serait-ce qu’une seule fois, me présenter à vous en tant qu’expert. Et si cela vous demande trop d’efforts, osez la comparaison avec un ESKIMO CALLBOY et revenez me dire que ce beurre à un goût de plastique.
Ajouté : Mercredi 06 Mars 2013 Chroniqueur : Stef. Score : Lien en relation: We Butter The Bread With Butter Website Hits: 7172
|