# 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
}
PREDATORY VIOLENCE (de) - Marked For Death (2012)
Label : SAOL (Service for Artist Owned Labels) / H'Art
Sortie du Scud : 29 juin 2012
Pays : Allemagne
Genre : Thrash Metal
Type : Album
Playtime : 10 Titres - 49 Mins
Avec des SODOM, KREATOR et autres DESTRUCTION plus en forme que jamais, il sera difficile pour PREDATORY VIOLENCE de passer pour autre chose qu’un faire-valoir au cœur de la bouillonnante scène Thrash Metal teutonne. Pourtant, avec déjà quatre albums en seulement sept années de carrière, le départ des Allemands est plutôt dans le genre boulet de canon. Encore faut-il que la qualité soit un pendant à la productivité. Et à l’écoute de ce quatrième bébé, un certain Marked For Death, rien n’est moins sûr. Parce que vous l’aurez compris, ces gars-là souffrent non seulement de l’âge canonique de leurs ainés, mais également de leur expérience, cumulée au bout de trente années de route. Personnellement, et comme beaucoup de monde je pense, si je n’arrive pas à m’injecter ma dose quotidienne de Thrash, je préfère cent fois me repasser l’Agent Orange de 1989 que les essais tâtonnants d’une supposée relève.
Mais attention, il y a néanmoins beaucoup de choses positives dans cet opus. Tout d’abord, et c’est ce qui fera le plus plaisir aux vieux de la vieille, on retrouve dans la production, dans les compositions, dans l’esprit, un petit grain old-school absolument bienvenu. Marked For Death, même s’il traversera le ciel aussi vite qu’une étoile filante, mérite largement qu’on sorte le télescope. Attention, rien de comparable au passage rarissime de la comète de Halley (plus que 49 ans à tenir !), mais les nombreuses friandises qui garnissent cette pochette-surprise rendront la déception d’un disque hésitant moins amère. Il faudra attendre dix minutes et « Mercy Shot » pour avoir droit à notre premier carré de chocolat. Sur cette piste tout ce qu’il y a de plus classique, enfin c’est ce qu’on croit, intervient au bout de cent vingt secondes un break très malin, qui contrecarre totalement nos prévisions d’un enregistrement compact et homogène. PREDATORY VIOLENCE a fait un départ en trombe, certes. L’heure est maintenant à l’apaisement. Ce Thrash se fait soudain un peu plus intello, avec des ralentissements de bon aloi, des parties mélodiques finement pensées et une fluidité nouvelle. L’intro de « Pillage And Plunder », incroyablement SATYRICON nouvelle mouture dans les guitares, est l’exemple même de ce besoin de rafraichissement, même si la proximité entre ces deux groupes semble bien involontaire. Marked For Death repart alors de plus belle, et ce ne sont certainement pas les pianos mélancoliques de « All This Hate In Me » qui y changeront quoique ce soit. Je suis d’ailleurs loin d’être un cœur d’artichaut, mais le côté très émouvant qui se dégage des arrangements de cette composition, ses huit minutes garnies de riffs très solennels et d’une profonde tristesse en font l’une de toutes meilleures de cette œuvre. Et pourtant, PREDATORY VIOLENCE ne peut s’empêcher d’être inconstant, en dépit de ce flot ininterrompu de bonnes intentions. La batterie est sous-mixée, les frappes sur la grosse caisse s’entendent à peine et le chant d’A. Machine, s’il est bien écorché, manque quand même de coffre. Tout ça, ce sont des détails techniques, des défauts qui se corrigent. Ce qui se rattrape avec plus de difficultés, c’est l’ennui qui pointe le bout de son nez sur des créations affreusement prévisibles comme « Marked For Death », « Parental Love » ou « Kickin’ Ass ». On a l’impression que ces mecs donnent tout sur certaines pistes et que ça leur a demandé tant d’énergie qu’ils se relâchent totalement sur d’autres. D’où le caractère vraiment déséquilibré et fluctuant de la galette.
C’est donc avec un petit pincement au cœur que j’accorde une note sévère à ce Marked For Death. PREDATORY VIOLENCE commet encore quelques erreurs de débutant mais globalement, l’esprit y est. On ne passe pas un moment désagréable en compagnie de cet album, mais il y a un tel potentiel et un tel charisme qui émane de certains titres (« Mercy Shot » donc mais aussi « All This Hate In Me ») qu’on est forcément frustré d’en être privé sur tous les autres. Et comme toujours dans ce genre de situations complexes, plutôt que de leur chercher des excuses, je me réfugie derrière l’Oncle Tom.
Ajouté : Mercredi 12 Septembre 2012 Chroniqueur : Stef. Score : Lien en relation: Predatory Violence Website Hits: 6672
|