# 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
}
ZAPRUDER (FRA) - Straight From The Horse's Mouth (2012)

Label : Auto-Production
Sortie du Scud : 18 juillet 2012
Pays : France
Genre : Post Hardcore
Type : EP
Playtime : 5 Titres - 34 Mins
Il fut un temps où les albums standard duraient trois quarts d’heure, et les EP moins de vingt… Les gars, vous auriez pu faire un effort… Un EP de trente quatre minutes ? Un morceau de plus, et on atteignait le LP… Et franchement, je n’aurais pas craché sur l’effort.
Parce que je dois avouer que je l’écoute en boucle votre truc qui sort de la bouche d’un cheval. Pochette superbe d’ailleurs, soit dit en passant.
Ok. On plante le décor. Vous voyez cette scène, à la fin des Joueurs, quand Matt Damon se pointe chez les ruskoffs ? Genre, il a plombé son PEL, emprunté à droite à gauche, et se retrouve face à celui qui l’a plumé au début ?
ZAPRUDER c’est tout à fait ça. Je les vois bien en tenue de ville, autour d’une table, avec cinq cartes dans leur jeu. La main passe, mais ils ne changent pas la donne. Et misent le tapis. Tout le monde les regarde l’air hagard, croyant au magnifique bluff, mais que dalle. Ils n’ont que cinq cartes, depuis le début, mais ce sont les bonnes. Quinte Flush Royale.
Et là, tu regardes tes jetons se barrer, mais tu ne fais même pas la gueule. Parce que c’est la classe.
Ils ont beau venir de Poitiers, ville étudiante triste et morne, ils propagent une musique riche, dense, que j’aurais bien aimé découvrir lorsque j’usais les bancs de la fac, là bas, dans cette ville grise. Gageons qu’au Confort Moderne, ils auraient tout explosé. En première partie de NEUROSIS tiens.
Alors après, qu’ils jouent du Post-Truc comme ils disent avec ironie, on s’en fout. Tout est post quelque chose d’ailleurs, alors…
Mais les mecs, vous êtes de mauvais bluffeurs. Désolé. Et même si vous n’avez pas posé dès le départ de ce Straight From The Horse's Mouth votre meilleure carte, on se doute tout de suite qu’on met les pieds sur le terrain de la qualité. CULT OF LUNA, CONVERGE, NEUROSIS, DILLINGER, bien vu les influences, je partage. Mais je dirais que votre plus grande influence est en fait vous-même.
Et vous avez beau mixer sur ce « GSM » introductif tous les styles extrêmes possibles, et ce en moins de quatre minutes (ce qui chez vous est assez rare pour le souligner), votre musique est homogène, puissante comme le souffle rauque du destin, et si on sent par instants précis de légères tendances Death, je le prends comme un gimmick. Idem pour les chœurs totalement Core.
Et dès « Falling Like Dead Snakes », je craque. Cette rythmique bancale, ce riff redondant, cette voix hurlée au-delà de l’humanité, c’est mon trip, j’achète. Un passage lourd qui évoque le meilleur des digressions de la bande à Scott Kelly, sept minutes progressives portées par une basse brillante, avec ma pauvre paire de huit, je ne pouvais pas lutter.
Mais c’est quand même du bol d’être tombé sur l’as dès la troisième passe. Sincèrement, la brosse à reluire, c’est pas mon truc. Mais « Mount Fuji In Red », c’est parfait. Rien à redire. Une intro maousse comme PINK FLOYD n’oserait plus en faire, une mélodie maladive et tendue comme une corde d’arc Sioux, c’est simple, mais encore fallait il y penser.
Ca peut rivaliser farouche avec le cultissime « Purify » des NEUROSIS, et c’est pourtant à part. Ce crescendo organique qui vous remonte les tripes au niveau du cœur, ces arpèges faussement doucereux qui s’échouent sur un riff larger than life, vous avez tout compris. Cinq minutes de balade au purgatoire avant l’intervention de lignes vocales crachant leur discours, pour finir par nous séduire délicatement, dans un trip à la CURRENT 93/CANDIRIA, et laisser place à un final évolutif magnifique… Douze minutes oniriques qui repoussent les limites encore un peu plus loin…
Et il fallait bien enchaîner avec le très Dillingerien « Lost In Vegas » pour digérer tout ça. Ca parait tout droit sorti de Calculating Infinity, mais le sax qui traîne, c’est la touche perso. Un peu comme si un John ZORN apaisé croisait le fer avec Ben. Un peu FANTOMAS pour le côté fausse BO louche aussi. Enfin en gros, c’est le Roi de Cœur qui tombe.
Et la Dame arrive sur le tapis. La messe est dite, et je pense que Blier aurait lâché à ce moment là, un verre à la main son fameux « c’est du brutal »… Ca finit un peu comme ça commence, à la dure, mais « We Carry Just Enough To Play », est plus que ça, c’est un aveu dans son titre même. Car vous, les ZAPRUDER ne mentez pas. Vous n’en rajoutez pas, rien n’est inutile. Vous donnez tout, mais c’est le nécessaire. La boucle est bouclée. On a plus qu’à filmer l’assassinat.
J’ai parié gros ce soir, et vous avez raflé la mise. Mais le pire, c’est que je m’en fous. Je suis même satisfait, c’est dire. Straight From The Horse's Mouth, c’est une sacrée main les mecs. Sur que les autres tables vont vous attendre au tournant.
Mais je ne m’inquiète pas pour vous, même si les sceptiques crieront à la chance du débutant. Je vous attends sur un tournoi, un vrai, longue durée.
Juste pour voir si vous allez reprendre le tapis.
Ajouté : Jeudi 09 Août 2012 Chroniqueur : Mortne2001 Score :      Lien en relation: Zapruder Website Hits: 12328
|