# 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
}
RICKY WARWICK (ie) - Belfast Confetti (2009)
Label : DR2 Records / Underclass
Sortie du Scud : 27 avril 2009
Pays : Irlande
Genre : Folk
Type : Album
Playtime : 14 Titres - 46 Mins
Aaahhhh Ricky Warwick … que de souvenirs, pour ma part. Une adolescence sauvagement bercée par le Metal d’alors, METALLICA, MEGADETH et SLAYER en tête. Et puis d’autres combos moins connus mais qui m’ont marqué comme jamais, à l’image de THE ALMIGHTY. De Blood Fire And Love à Powertrippin’ (chronique ici), ce quatuor britannique a fait un sans faute (la suite pue l’opportunisme à plein nez, avec notamment un virage Punk Rock peu apprécié en pleine « OFFSPRING fever » …), et n’a jamais rencontré le succès qu’il méritait.
Ricky Warwick, c’était également le mari de Vanessa Warwick, présentatrice Punk (ah ! ces cheveux verts !) et sexy du Headbanger’s Ball sur MTV, lorsqu’on arrivait encore à écouter et voir du Metal à la téloche … quand je vous dis que ce sont des bons souvenirs …
En relisant la chronique de Powertrippin’, je me rends compte aussi d’une énorme boulette de ma part. J’ai toujours cru que THE ALMIGHTY était un groupe écossais. Il a bien été formé en Ecosse, à Strathaven, mais par un guitariste chanteur irlandais (notre Ricky) avec trois musicos du coin.
Car Ricky Warwick, ce rockeur roux à la voix éraillée, est un p’tit gars d’Irlande du Nord. Depuis que THE ALMIGHTY était tombé aux oubliettes, j’avais eu vent de sa carrière solo, donnant peu dans le Metal et plutôt dans le Rock pur. J’avoue, j’attendais Belfast Confetti et son immonde pochette (quel mauvais goût !) avec un maximum d’appréhension. Et aussi je dois le dire, en espérant pourvoir flinguer le disque d’un gars qui a sabordé en quelques albums minables un des Metal bands les plus prometteurs. Et comme souvent dans ces cas là, j’ai été agréablement surpris.
Ne cherchez pas une once de Metal sur Belfast Confetti, il n’y en a pas. Pas de guitares saturées non plus d’ailleurs (mis à part sur les dernières mesures de « Can’t Wait For Tomorrow »), ici les accords se jouent en son clair. Cela n’empêche pas Ricky de forcer un peu sur sa voix, mais voilà tout à fait le genre de musique que l’on se plaît à entendre dans un Pub irlandais. La bande-son idéale pour boire un Whisky ou une Guinness entre potes (et avec des filles bien sûr, héhéhé …).
Par moments l’ambiance se veut festive, sur la traditionnelle et dansante « The Arms Of Belfast Town », lorsque les flûtes et violons dansent autour d’un Ricky vraiment à l’aise (ma surprise est toujours de taille et je m’en remets pas …). Mais j’ai un faible pour les chansons plus intimistes, que l’on pourrait chanter au coin du feu, accompagné d’une guitare et d’un harmonica (« Throwin’ Dirt », « If Your Gonna Bleed »). Sûr que Warwick doit écouter Springsteen en boucle ces dernières années, tellement l’influence du Boss se fait sentir. Mais pour qui aime le style, il faut bien admettre que Ricky maîtrise ce nouveau répertoire à la perfection … Comme si il l’avait toujours eue en lui, cette poésie Folk irlandaise. La question ne se pose même pas. Il l’a toujours eue dans le cœur.
Le plus surprenant, c’est de l’entendre chanter des chansons si calmes (« Angel Of Guile ») avec juste un peu de violon, de piano, d’harmonica (« Punchin’ Thunder »), ou des petites douceurs acoustiques au titre contrasté (« Born Fightin’ »). La première immigration du Nouveau Monde américain ayant été constituée d’aventuriers irlandais, entre autres, il n’est pas étonnant de déceler un brin de musique américaine (on croirait R.E.M. sur « Thousands Ae Leaving »), comme celle que se plaît à écrire Mark Knopfler ces dernières années (le titre éponyme, sur fond d’accords de piano et guitares, et son orgue si discret mais pourtant si séduisant).
Et en plus, Ricky chante bien, vraiment bien (même si il imite Springsteen assez souvent).
Loin, loin des sphères Metal, voilà un Belfast Confetti bien agréable, réussi, que je ne manquerai pas de ré-écouter dès que l’occase se représentera.
D’ailleurs, je vais aller me boire une Guinness au Galway, moi … et ressortir ma guitare sèche.
Ajouté : Vendredi 29 Mai 2009 Chroniqueur : NicoTheSpur Score : Lien en relation: Ricky Warwick Website Hits: 9357
|