# 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
}
SODOM (de) - Tapping The Vein (1992)
Label : Steamhammer / SPV Records
Sortie du Scud : 1er aout 1992
Pays : Allemagne
Genre : Thrash Metal
Type : Album
Playtime : 11 Titres - 46 Mins
Inarrêtables ! Rares sont ceux à avoir encaissé aussi bien que SODOM la déferlante de Death Metal qui s’est abattue sur la scène extrême au début des années 1990, reléguant le Thrash a un style désormais convenu et redondant. Très peu enclins à se voir détrôner du sommet de l’Olympe métallique par des petits gars consommateurs de Krisprolls, notre trio préfère réitérer une menace déjà prononcée sur Better Off Dead, deux ans auparavant : ça va être sanglant ! Et c’est là où l’on attendait un coup de mou que les allemands passent avec succès la vitesse supérieure grâce à un embrayage huilé et une vision de la situation claire comme le cristal. Andy Brings succède à Hoffman au poste de guitariste et, chose peu conventionnelle, restera en place le temps de deux albums. La mayonnaise a décidément toutes les peines du monde à prendre avec les guitaristes qui voient leurs baux rompus à tout-va. Cela n’empêche néanmoins pas SODOM de conserver un rythme très productif, puisque Tapping The Vein demeure leur cinquième album depuis mai 1986 et Obsessed By Cruelty.
La cover est des plus explicites. Ce soldat hypertrophié se dope probablement à l’adrénaline d’un combat sanglant sur fond de conflit international. Les teutons conservent donc leur thème favori : la guerre. Et ils ne sont pas prêts de le lâcher. La plaidoirie s’ouvre avec « Body Parts » qui exprime très tôt la violence générale que peut inspirer le sujet traité. Witchhunter qui effectue sans le savoir sa dernière bataille avant un retour éclair en 2007 et un décès précoce, appuie sur la gâchette avec beaucoup de fureur, déclenchant une rafale de mitraillette et imposant une cadence militaire. SODOM abandonne toutes les innovations fluettes entrevues précédemment à grands coups de reprises Hard Rock et nous offre un Thrash Metal de sa meilleure cuvée tout en sachant que l’auditeur boira le calice jusqu’à la lie où le coma éthylique. Pas loin de provoquer l’overdose, le trio ne tombe cependant jamais dans l’exagération et se voit suffisamment habile pour varier ses tempos dans des zones aussi lancinantes qu’hallucinogènes (« One Step Over The Line »). Il n’y a pas le petit brin de folie qui modifie une destinée mais SODOM n’en a pas vraiment besoin, la sienne est toute tracée. Les trois compères se contentent de reprendre les structures les plus efficaces, les mêmes qui continuent d’entretenir le mythe, en ajoutant ponctuellement quelques solos mauvais comme la peste (« Wachturm »). Pourtant, il semble qu’inconsciemment, les allemands incorporent parfois quelques éléments Death sur certains morceaux comme la batterie sur la piste éponyme ou les riffs vraiment très brutaux de « Skinned Alive ». Rien d’alarmant car ce petit écart de conduite amène un poil de diversité à des moments opportuns.
SODOM affine son style, devient plus brutal tout en conservant un esprit renfrogné et authentique. Ces mecs là ont la classe ! Ils donnent l’impression de pouvoir continuer éternellement dans cette voie sans jamais tomber en panne d’inspiration ou d’envie. C’était l’époque où le Thrash en avait encore sous la semelle et surtout dans le pantalon. Nostalgie, entrez dans la légende !
Discographie Complète de SODOM :
In The Sign Of Evil (Mini Album - 1984),
Obsessed By Cruelty (Album - 1987),
Persecution Mania (Album - 1987),
Agent Orange (Album - 1989),
Better Off Dead (Album - 1990),
Tapping The Vein (Album - 1992),
Get What You Deserve (Album - 1994),
Masquerade In Blood (Album - 1995),
'Til Death Do Us Unite (Album - 1997),
Code Red (Album - 1999),
M-16 (Album - 2001),
Sodom (Album - 2006),
The Final Sign Of Evil (Album - 2007),
In War And Pieces (Album - 2010),
Epitome Of Torture (2013)
Ajouté : Dimanche 29 Août 2010 Chroniqueur : Stef. Score : Lien en relation: Sodom Website Hits: 10959
|