# 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
}
THE AFTERNOON GENTLEMEN / LYCANTHROPHY (uk/cz) - Split 10'' (2015)
Label : Dead Heroes
Sortie du Scud : 18 juillet 2015
Pays : Angleterre / République Tchèque
Genre : Grind
Type : Album
Playtime : 13 Titres - 13 Mins
Bon allez, ça suffit les chroniques alambiquées avec de belles tournures et une syntaxe parfaite. Back to basics et en l'occurrence, une de mes obsessions, le Grind pur et dur.
Et avec cette sortie vinylique de Dead Heros, je suis servi.
Cosmopolite, mais bruyant, séduisant, mais dégoûtant. Oui, parfois, il faut mettre les mains dans le cambouis et savoir respirer les mauvaises odeurs. Mais allons y, jetons nous à corps perdu dans ces faces partagées par des ardents défenseurs de la cause bruitiste qui m'est si chère.
A Gauche des anglais, de Leeds. Flingués. A droite, des tchèques, tarés. Au milieu, vous et moi, le crâne prêt à imploser.
THE AFTERNOON GENTLEMEN, ce sont des pseudos improbables (Madame Du Bobny, Old Man Bifter, Speakeasy, Sir William Of Bagney et The Oiler), du Grind un peu louche, et un paquet de sorties depuis 2008/2009. Le pedigree est bon, ils ont collé leur derrière à ceux des CHIENS, ont morflé avec SUFFERING MIND, et se sont même permis quelques 7'' et un longue durée, éponyme, sorti en cette même année, dont il est fort probable que je vous parle un de ces jours.
Bon en dehors de ça, pas de soucis, une intro/outro folklorique, et entre temps, une poignée de morceaux qui ne dépassent pas la minute une fois les effets et samples expurgés. C'est puissant, ça cogne, mais ça joue finaud. Guitares sourdes et affûtées, basse qui ronronne comme une résistance de chaudière, et puis c'est parti, blasts, cris porcins, affolement parfois un peu Goregrind, mais rien de grave, ça reste classique et non sensique. C'est du moderne, qui multiplie les plans, qui fait appel à des astuces Core & Crust, mais c'est hyper efficace dans le genre Grind/D-Beat qui assomme ("Dustbin Banquet"), même sur des machins qui ne frisent pas les trente secondes ("Second Chance", on ne savait même pas qu'on avait gâché la première, mais même en ce temps bref imparti, ils arrivent quand même à nous expliquer trois ou quatre trucs différents).
C'est même super lourd et presque Sludge crasseux ("Waste Of Flesh"), comme quoi les mecs bouffent à tous les râteliers.
Mais on ne partage pas un split 7'' avec CHIENS par hasard, à moins qu'on ne ronge le même os. Bon bilan, c'est le foutoir, on ne comprend pas tout, mais ça décalque, et dans les grandes largeurs. Et en plus, c'est drôle. "I want to be a friend to you, you will see me everyday" ? Non les gars, ça va aller merci.
Bon mais en même temps, en République Tchèque, ça ne va pas mieux. Les LYCANTHROPHY ne sont pas plus stables mentalement, et de groupe Mince/Core à la fin des années 90, ils sont devenu semble il un gros combo de Powerviolence au fil des années. Eux aussi ont partagé leur gamelle avec des potes, NOISEAR, NEEDFUL THINGS en tête de banc, et rien que ça annonce la couleur.
En écoutant ces quelques morceaux qui font écho au LP éponyme paru en 2010, on se dit que les choses ne se sont pas vraiment calmées depuis. Toujours menés par la très jolie Zdisha (on ne s'attend pas - et sans machisme aucun - à découvrir une aussi jolie fille vociférant dans un combo pur Grind), qui partage les vocal duties avec son compère au gosier hirsute Supin, LYCANTHROPHY ne se pose pas de questions, et balance les flèches à l'aveuglette, qui suivent le rythme de blasts épuisants.
Ils ne rechignent pas non plus à ralentir la cadence pour quelques instants, avec de gros passages bien sombres et lents presque Sludge, mais ça ne dure jamais longtemps, et l'hystérie les reprend vite. Morceaux hyper courts, lapidaires, pas de doute, c'est du Grind, et qui se classe dans la catégorie extrême de fait. Redondant ? Non écoutez et jugez.
Si le timbre de voix caverneux de Supin complète à merveille les hurlements possédés de jeune fille en fleur de Zdisha, derrière ça usine sans relâche, et la rythmique perd ses puces et ses pellicules sans shampoing ni frontline en dosette. C'est bordélique, suffisamment fou pour qu'on accroche, et puis ça dézingue à tout va, alors tout va... bien.
Bon allez, ça suffit, si ça vous a mis en appétit, allez fouiller dans leurs bandcamp respectifs de quoi bouffer à midi. La plupart du temps, c'est gratuit, mais rien ne vous empêche de leur céder quelques deniers pour vous faire plaisir avec leurs vinyles.
Grind un jour, Grind toujours.
Ajouté : Samedi 04 Juin 2016 Chroniqueur : Mortne2001 Score : Lien en relation: The Afternoon Gentlemen Website Hits: 5010
|