# 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
}
JOB FOR A COWBOY (usa) - Demonocracy (2012)

Label : Metal Blade Records
Sortie du Scud : 10 avril 2012
Pays : Etats-Unis
Genre : Death Metal moderne
Type : Album
Playtime : 9 Titres - 40 Mins
Personne ici ne contestera le fait que JOB FOR A COWBOY est de ces groupes dont l’ascension est aussi fulgurante qu’elle en devient suspecte. Pourtant, ces arizoniens n’ont jamais eu la moindre mauvaise intention en tête. Leur côté girouette, d’abord je fais du Deathcore et après je passe au Brutal Death, n’est certainement pas le fruit de savants calculs. C’est tout au plus de l’insouciance. Alors bien sûr, on connaît l’animal et ses courbettes déplacées devant les chantres du Death Metal à l’américaine, mais comment leur en tenir rigueur ? La vérité, c’est que Demonocracy, troisième album d’une formation dont on n’attend déjà plus grand-chose mais capable de surprendre à tous moments, est un plaidoyer convaincant. Un mea culpa qui n’en a pas l’air.
Chacun verra évidement dans cette pochette le remodelage Deathcore du …And Justice For All de METALLICA. Pour autant, ce disque n’affolera surement pas les statisticiens, ni les observateurs. Le lien se rompt ici. Parce que Demonocracy mange dans la même gamelle que Ruination. Il a le mérite de confirmer la relégation de l’épisode Gloom au rang de sortie de remplissage, puisqu’enfin on retrouve ce qui faisait le charme de son grand-frère. Habile mixture qui concentre un Death pas vraiment brutal, pas vraiment technique, pas vraiment moderne mais tout ça à la fois, ce full-lenght démarre sur des bases X qui semblent vouloir déboucher sur une conclusion Y. Seulement, JOB FOR A COWBOY ne fait pas partie de ce microcosme d’intellectuels qui parviennent à faire voyager leur public d’un univers à un autre. Le seul endroit où l’on se retrouve plongé, c’est au cœur d’un gros pogo. On repassera donc pour la finesse. Et si certains, comme moi, redoutent toujours un peu les productions qui se plastifient au fur et à mesure que passe le temps, ils peuvent souffler. Car Demonocracy, bien aidé par Jason Suecof, sauve les meubles sur ce point. Sur les autres aussi d’ailleurs. Sans avoir à changer de crèmerie, les américains ont le chic pour toujours nous mitonner de savoureux petits plats. Il y a cet empilage de riffs au mètre carré assez hallucinant, cette palette technique qu’on aimerait parfois voir disparaître mais qui rappelle que ces gars ont influencé WITHIN THE RUINS et autres SON OF AURELIUS. Il y a aussi l’inévitable Jonny Davy paré de sa voix à double tranchant et le duo Glassman / Sannicandro qui s’autorise quelques virées vers des horizons plus groovys, fortement aidé par un Nick Schendzielos qui se bat sur chaque morceau pour faire ronronner sa basse. La mayonnaise prend assez vite, parce que ces garçons ont de la bouteille et parce que la timidité attendrissante de leur Death faussement viril le rend passe-partout. On ne retiendra pas vraiment une chanson sur les neuf proposées (même si « Tarnished Gluttony » a quelque chose en plus sans qu’on sache définir quoi). On se souviendra seulement qu’une fois encore, JOB FOR A COWBOY tabasse un auditorat qui n’en demandait pas tant.
Reste ce manque d’innovation, qu’on ne désirait pas vraiment, mais qui s’impose bizarrement comme une fatale réalité. Les Américains ont toujours eu le bon goût de jouer suffisamment fort et carré pour masquer quelques carences dans la composition pure. Une bonne technique doublée de roublardises qui suffit à définir Demonocracy comme leur opus le plus travaillé et abouti. La frontière est étroite entre ce jet et les précédents, mais l’important c’est qu’elle existe bel et bien. On s’en contentera.
Ajouté : Mercredi 09 Mai 2012 Chroniqueur : Stef. Score :     Lien en relation: Job For A Cowboy Website Hits: 9038
|