# 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
}
BLACK SABBATH (uk) - Headless Cross (1989)
Label : IRS
Sortie du Scud : 24 avril 1989
Pays : Grande Bretagne
Genre : Heavy Metal
Type : Album
Playtime : 8 Titres - 40 Mins
En 1987, après la sortie tumultueuse de The Eternal Idol, le vaisseau BLACK SABBATH peut être fier d'avoir survécu à la tempête qui a failli l'engloutir. Le capitaine Iommi a tenu bon, vent debout, peinant à recruter un nouvel équipage qui accepte de poursuivre l'aventure à ses côtés. L'album n'a malheureusement pas reçu un très bon accueil, la tournée promotionnelle a été laborieuse avec des dates annulées faute de ventes suffisantes si bien que le label Vertigo a décidé de ne pas renouveler un partenariat historique avec BLACK SABBATH. Le navire est sorti de la tempête, certes, mais la crique tranquille où il pourra s'amarrer pour souffler un petit peu n'est pas encore en vue.
1988 est une année sombre pour le combo qui ne donne qu'un unique concert (et pour seulement trois chansons). Tony Iommi cherche à recruter des musiciens suffisamment réputés et valeureux pour redonner au Sab le lustre des temps anciens. En octobre 1988, le groupe est presque complet. A l'homme en noir se sont joints Cozy Powell (batterie), Jeoff Nichols (claviers) et Tony Martin (chant). Il n'y a pas de bassiste dans le line-up car Tony Iommi espère le retour de Geezer Buttler qui joue les arlésiennes. L'opus est écrit et composé par Iommi, Powell, Nichols et Martin en quelques semaines. Il est enregistré au studio Woodcray et produit par Tony Iommi et Cozy Powell. Le groupe s'accorde un luxueux bonus en accueillant Brian May de QUEEN qui vient enregistrer le solo de guitare de la chanson "When Death Calls". Les lignes de basse sont enregistrées a posteriori par Laurence Cottle, un bassiste de session. Après la défection de Geezer Butler, c'est finalement Neil Murray qui est recruté pour la tournée promotionnelle. L'ex bassiste de WITHESNAKE restera auprès du Sab pour les albums suivants, à l'exclusion de DEHUMANIZER (enregistré avec Geezer Buttler).
Bien plus cohérent que ses prédécesseurs, Headless Cross est un disque comparable à Heaven and Hell. Il y a en effet une cohérence narrative qui faisait défaut à Seventh Star et The Eternal Idol. Le fait que le disque ait été composé d'une seule traite et en très peu de temps par une équipe soudée et artistiquement en phase joue pour beaucoup dans le résultat final.
"L'album donne le sentiment d'avoir été façonné dans un seul souffle ininterrompu, sous la puissante impulsion du tandem Iommi / Powell. Pour la première fois depuis le départ de Ronnie James Dio, Tony a face à lui un véritable contre-pouvoir. Cozy Powell est bien décidé à imprimer sa marque sur le style de BLACK SABBATH et de renvoyer le groupe vers des sommets qu'il n'aurait jamais dû quitter, selon lui." (Guillaume Roos / La bête venue de Birmingham).
Tony Martin n'avait pas du tout pris part à la construction de l'album précédent. Sur Headless Cross, le chanteur peut enfin s'exprimer en choisissant ses mélodies et en écrivant ses propres textes. Le résultat de la collaboration des musiciens est un projet sombre, lourd, pesant et plombé avec une rythmique massive, des échappées de guitare inspirées et un chanteur parfaitement dans le ton. Headless Cross est également un album très cohérent et de qualité homogène. Il n'y a pas un single qui se détache du lot, toutes les chansons étant des hits en puissance. Que les mauvaises langues qui qualifient Tony Martin de sous-Dio aillent se recoucher, avec Headless Cross, le chanteur montre qu'il est capable de tirer son épingle du jeu en n'étant pas juste une belle voix mais un frontman accompli qui insuffle sa propre personnalité à l'album. Si les compos sont comparables en inventivité et en puissance à celles de la période Dio, les lyrics de Tony Martin sont quant à eux assez proches des débuts du Sabbat noir : il y a du diabolique et de la sorcellerie à tous les étages !
"Tony Martin had just come into the band and he assumed, oh, BLACK SABBATH, it's all about the Devil, so his lyrics were full of the Devil and Satan. It was too much in your face." (Tony Iommi, 2012)
Pari tenu, le bateau est arrivé à bon port et l'équipage est désormais au complet. Headless Cross est l'excellent album que les fans attendaient. Certes BLACK SABBATH n'a plus la même stature, mais avec la patine des ans, Headless Cross doit être considéré comme un disque qui compte dans la discographie du combo.
Ajouté : Samedi 23 Juillet 2016 Chroniqueur : Rivax Score : Lien en relation: Black Sabbath Website Hits: 5534
|