# 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
}
CHROME MOLLY (uk) - Gunpowder Diplomacy (2013)
Label : earMUSIC
Sortie du Scud : 25 janvier 2013
Pays : Angleterre
Genre : Hard Rock / Heavy Metal
Type : Album
Playtime : 11 Titres - 48 Mins
Est-ce du lard ou du cochon ? Du pure malt ou du Bourbon ? Avec son étiquette graphique indiquant fièrement "23 Y.O", on est tenté de voir en Gunpowder Diplomacy un breuvage de garde d'une finesse et d'une noblesse qui forcent l'admiration. L'heure est désormais à la dégustation. Et pour cause, après 23 années de silence discographique, les vieux de la vieille, j'ai nommé CHROME MOLLY, sont de retour sur le devant de la scène avec leur cinquième album studio. Il était temps de dépoussiérer le flacon, et surtout, pourvu qu'on ait l'ivresse. Cette ivresse, c'est celle d'un Hard Rock malté qui a grandi et vieilli en Angleterre, aux côtés de DEF LEPPARD, URIAH HEEP et MOTÖRHEAD, excusez du peu. Accepté au sein de la scène à partir de son troisième opus, Angst (1988), le groupe sombre en 1991, un an après Slaphead, dans un profond coma. Ressuscité en 2010 par son emblématique chanteur Steve Hawkins, CHROME MOLLY œuvre en 2013 un retour en force avec Gunpowder Diplomacy, sans qu'on sache vraiment si c'est par besoin ou par passion.
C'est l'enseignement majeur de ce full-lenght. Souvent à deux doigts de basculer dans un état de grâce transcendantal, à tel point que CHROME MOLLY nous en proposerait presque une nouvelle définition du retour triomphal, Gunpowder Diplomacy pêche par excès de confiance et rate à multiples reprises le coche de l'euphorie. Oui, ce disque 100% feeling, 100% Hard N' Heavy, est vraiment très bon, accrocheur, percutant. Sauf qu'il nous manque cette notion de culte pour pouvoir l'apprécier en tant que tel. Fidèle, notamment au niveau de la production, à l'évolution de la scène Hard Rock (qu'ils auront eu loisir de constater de l'extérieur), CHROME MOLLY nous pond là un mélange maladroit entre tubes en puissance et morceaux fantomatiques. L'évidence, avant même que le disque ne démarre, c'était d'avoir très vite affaire à du lourd. Les Anglais devaient marquer les esprits et réussissent plutôt bien leur coup via cet enchainement dynamique et frais entre "Corporation Fear", "TV Cops" et "Stop Love !". Riffs musclés, refrains entêtants, chœurs et solos à l'ancienne sont de la partie. Petite bombe (mais à retardement) de Hard Rock moucheté de Heavy Metal, Gunpowder Diplomacy part sur d'excellentes bases, guidé par un Steve Hawkins en grande forme. Le temps s'est arrêté le concernant et seuls les stigmates d'une chevelure poivre et sel trahissent cette information. A l'âge de la retraite, le bonhomme poursuit son prêche avec professionnalisme et ses musiciens (même si guitariste et batteur n'ont pas fait partie du line-up de l'époque) tiennent presque mal le rythme de l'aïeul. On constate d'ailleurs un désagréable essoufflement rythmique sur "Clean Outta Lock", "All In My Mind" et "Billion Dollar Heart Attack", davantage concentrés sur le groove que sur la vitesse. C'est adéquat quand c'est mémorable. Pas ici. Trop classique, trop rabâché. Cinq minutes à 850W et le tour est joué. Après l'effort, le coup de froid. C'est d'ailleurs l'étonnant défaut de Gunpowder Diplomacy qui achève sa course en eau de boudin. Qu'elle semble lointaine, l'époque où je rêvais d'un parallèle entre whiskey et CHROME MOLLY. Pas trop vite le matin, doucement l'après-midi, "Bulletproof", "The Runner" ou "Complicated" évoluent sur des structures infatigables mais maintes fois entendues qui tranchent d'avec l'exclusivité de l'excellente "Corporation Fear".
Alors en définitive, que retenir de ce retour mitigé ? Que s'il s'arrêtait au bout d'un quart d'heure, Gunpowder Diplomacy serait peut-être l'album Hard / Heavy de 2013 ? Que les vieilles gloires ont raison de revenir seulement si la performance revêt son costume le plus perfectionniste ? Que l'appel du Rock est irrésistible, au point de mettre en danger sa crédibilité ? Oui, CHROME MOLLY en est un témoin privilégié, et si ce come-back balance entre la figue et le raisin, le verre à moitié vide et à moitié plein, le lard ou le cochon, le pure malt ou le Bourbon, chacun sera libre d'en apprécier la hardiesse. Et dans "hardiesse", il y a "Hard", ne l'oublions pas.
Ajouté : Samedi 04 Juillet 2015 Chroniqueur : Stef. Score : Lien en relation: Chrome Molly Website Hits: 5560
|