# 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
}
RED LAMB (usa) - Red Lamb (2012)
Label : MIG Music
Sortie du Scud : 6 février 2012
Pays : Etats-Unis
Genre : Heavy / Thrash Metal
Type : Album
Playtime : 12 Titres - 48 Mins
La raison du plus fort est toujours la meilleure :
Nous l’allons montrer tout à l’heure.
Un Dan Spitz désormais soulagé
Du poids engendré par le fait
De ne plus faire partie de la maison ANTHRAX
Se désaltérait dans le courant d’un Heavy / Thrash Metal pur.
Un Dave Mustaine survient à jeun qui cherchait aventure,
Et que la vénalité en ces lieux attirait.
Qui te rend si hardi de troubler ma renommée ?
Dit ce rouquin plein de rage.
Tu seras châtié de ta témérité.
- Sire rouquin, répond le Spitz, que votre Majesté
Ne se mette pas en colère,
Mais plutôt qu’elle considère,
Que je me vas expérimentant,
Dans le courant Heavy / Thrash,
Plus de vingt pas au dessous d’Elle,
Et que par conséquent, en aucune façon,
Je ne puis troubler sa boisson alcoolisée.
- « Tu la troubles », reprit cette bête cruelle,
Et je sais que de moi tu envies les talents de producteur.
- Comment aurais-je pu faire autrement ?
Reprit le Spitz, « je tette encor ma mère ».
- Si ce n’est toi, c’est donc ton frère Dave.
- Pas depuis qu’il a quitté BLACK SABBATH »
- C’est donc quelqu’un des tiens
Car vous ne m’épargner guère
Vous, vos envies et vos projets.
On me l’a dit, il faut que je me venge…
Ainsi naquit l’idée de cet album, le premier sorti sous le nom RED LAMB. Toute ressemblance avec des fables de Jean de La Fontaine ou des situations existantes ou ayant existé ne saurait être que fortuite. Dan Spitz, débarqué depuis trois ans de chez ANTHRAX, a finalement concrétisé un dessein qui lui tenait à cœur. Mais ce n’est que deux ans plus tard, en 2012, que les premières esquisses de ce tout nouveau groupe arrivent à nos oreilles. Co-produit avec Dave Mustaine, ce premier opus éponyme est un signal fort adressé au monde du Metal, qui voit arriver un nouveau prétendant aux scènes prestigieuses. On ne va pas se le cacher, RED LAMB est une fantaisie un peu bling-bling, un peu racoleuse qui veut se faire une place dans un milieu où tous les sièges sont déjà occupés. Bien sûr, on ressent l’incroyable expérience de Dan Spitz au cœur de ces douze compositions. Celui qui tient les guitares et la basse sur tout l’album prouve une fois encore son aptitude à écrire et à balancer un Thrash Metal vivace, fluide et percutant. On retrouve épisodiquement la frénésie d’un vieux ANTHRAX, période Spreading The Disease et Among The Living, ce qui ne va assurément pas faire plaisir à Dan qui s’est démené pour construire un full-lenght qui ne devait ressembler à aucun album d’ANTHRAX. Désolé Dan, tu t’es un peu foiré sur ce coup. Parce que Red Lamb aussi bien produit soit-il, demeure une sortie banale dans un univers pas banal. Les compositions respectent toutes le même schéma, avec la présence d’un riffing tranchant, de mélodies décoiffantes, de cadences prémâchées. Don Chaffin, un vocaliste qui ressemble davantage à une trouvaille dans un vide-grenier, s’évertue à paraître crédible et y parvient globalement. Seulement, son chant aux curieux relents de roukmoute atteste de son relatif manque d’envergure au cœur de cet univers qui ne peut se permettre d’adopter des vocaux approximatifs. Ce mélange attendu d’ANTHRAX et de MEGADETH déçoit à cause de sa prévisibilité. Au sens large du terme, il demeure une concoction Metal pour le grand public, ce qui n’est assurément pas une force à mon goût. Les classiques du style ayant déjà été écrits, je ne vois pas où se situe la pertinence d’un album qui joue sur son côté passe-partout. Enfoncer des portes ouvertes juste pour le fun ? Ca n’a rien d’indispensable. Aussi, je conclurais en insistant sur le fait que de jouer sur une réputation n’a jamais été un gage de qualité et que Red Lamb, sans être un essai foncièrement désagréable, est bigrement dénué de moments forts.
… Là-dessus, au fond des forêts
Le Mustaine et le Spitz s’en vont s’auto-congratuler
Sans qu’on n’y comprenne réellement l’intérêt.
Ajouté : Mercredi 28 Août 2013 Chroniqueur : Stef. Score : Lien en relation: Red Lamb Website Hits: 6178
|