# 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
}
THE ORANGE MAN THEORY (it) - Giants, Demons And Flocks Of Sheep (2013)
Label : Subsound Records
Sortie du Scud : 20 mai 2013
Pays : France
Genre : Death Metal / Grind / Crust
Type : Album
Playtime : 10 Titres - 40 Mins
La vie n'est jamais belle. On ne fera rien pour la rendre meilleure.
Cette petite phrase anecdotique me trotte encore dans la tête. En novembre 2012, Marco "Cinghio" Mastrobuono accordait à Metal-Impact une interview exclusive dans le cadre de la sortie du nouvel album de BUFFALO GRILLZ, Manzo Criminale. Un an plus tard (et pour quelques années encore), la force du personnage reste gravée en moi. Aujourd'hui, c'est au tour de THE ORANGE MAN THEORY de passer sur le billard. Et comme TSUBO, comme DR. GORE, comme UNDERTAKERS, ils se connaissent bien. La scène romaine est une toile d'araignée dont certains fils sont plus rigides et assurément, cette frange là fait partie des liens les plus résistants. Après le Grind furieux et décousu de BUFFALO GRILLZ, place au Death / Grind puant et catchy de ce projet qui compte comme bassiste un certain... Cinghio ! Assurément, les retrouvailles promettent d'être chaudes et avec ce troisième album poétiquement intitulé Giants, Demons And Flocks Of Sheep, la déception nous fera faux bond.
On retrouve à l'intérieur de cet opus, scellé dans un coffre-fort inviolable, toute la rage et la démence qui s'échappait des pores de Manzo Criminale. Mais la violence est ici différente. THE ORANGE MAN THEORY assume son côté Death et ses nuances Crust. THE ORANGE MAN THEORY revendique le jusqu'au-boutisme rythmique de "Point Of No Arrival", la voix criarde, surement plus Black que Death, de Giorgio "Giorgini" Cifuni (alias papier-caillou-ciseaux et chanteur chez TSUBO). Ce métissage stylistique pas inédit pour un sou, incorporant une grosse louche de Punk baveux, est pourtant des plus habiles. On sait à peu près tous comment va se jouer la scène et c'est précisément sur ce point que les Romains vont se montrer surprenants. Très vite, "Kill Me" dégueule ses riffs crémeux façon grosses beignes fourrées et ses aspérités apocalyptiques pour instaurer un climat délétère. Cinghio (qui ne lâche pas sa basse) s'offre un petit moment de folie au cœur du morceau, comme pour mieux faire comprendre que quoiqu'il puisse arriver, THE ORANGE MAN THEORY fonctionne au feeling. Autre point important, l'état d'esprit de Giants, Demons And Flocks Of Sheep est noir. L'ambiance est opprimante, détestable, une vraie saignée. A l'inverse de BUFFALO GRILLZ qui table sur un concept plutôt parodique pour se détacher de la masse, ce groupe souille lentement l'auditeur, le plonge dans un malaise profond à grands renforts de tournures parfois psychédéliques, parfois psychotiques, le tout goupillé sur une trame Crust / Punk / Rock qui offre une dynamique granuleuse à l'opus. On se sent davantage sale que vidé à l'issue de cet effort intense. THE ORANGE MAN THEORY demande beaucoup de concentration, de motivation aussi, pour comprendre sa musique, si jamais il y a besoin de la comprendre. La plupart du temps, la vivre pleinement sera suffisant. Pour finir, s'il ne règne pas une alchimie incroyable entre les membres d'un groupe qui ressemble davantage à un délire hallucinogène collectif qu'à un vrai bloc de granit, on ressent néanmoins la personnalité de chaque musicien. Dandy possédé pour Giorgio (chant), bûcheron mal vissé pour Tommaso (batterie), j'en passe...
Difficile d'en dire davantage. Avec "Help Me", une longue conclusion de 8 minutes qui s'achève sur un sample très curieux, les Italiens jettent un doute définitif sur leur santé mentale. Totalement imprévisible, sacrément bien monté, Giants, Demons And Flocks Of Sheep est un troisième album déstabilisant qui trouvera assurément son public des deux côtés des Alpes. Il nous laissera repus, songeurs et forts de quelques certitudes. Il va de soi que ces gens là ne veulent pas nous rendre la vie meilleure.
Ajouté : Samedi 08 Mars 2014 Chroniqueur : Stef. Score : Lien en relation: The Orange Man Theory Website Hits: 5256
|