# 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
}
ROOTWORK (uk) - Some Of Us May Never Bloom (2016)

Label : Ubiquity Project Records
Sortie du Scud : 18 novembre 2016
Pays : Royaume-Uni
Genre : Metal Alternatif
Type : EP
Playtime : 5 Titres - 26 Mins
Plus j'écoute de disques de jeunes pousses du Metal, plus il m'est difficile de les catégoriser. Cet exercice de disquaire consistant à faire entrer une musique dans une case peut paraître un peu vaine à certains auditeurs, mais d'autres ont besoin de savoir où ils mettent les pieds, ne serait-ce que pour éviter de se risquer dans une musique qu'ils souhaitent éviter. Il y a des aventuriers, il y a des timorés et il y a nous qui devons donner envie aux premiers et rassurer les seconds. Bien sûr nous aimerions que vous fassiez aveuglément confiance à notre prose, rendant l'exercice de catégorisation inutile, mais vous admettrez que bien souvent, vous commencez par regarder de quel genre de musique il est question avant d'aller plus avant dans la présentation d'un projet.
C'était facile il y a quinze ans, quand les genres étaient encore clairement définis et hermétiques. Mais aujourd'hui, les groupes semblent tentés par l'hybridation. Ces derniers ne nous aident pas vraiment, choisissant eux-mêmes d'inventer de nouvelles catégories improbables comme le Sludge - Pop. Préférant écouter notre sensibilité et suivre notre instinct, nous avons en l'espèce qualifié ce deuxième EP des britanniques de ROOTWORK de Metal Alternatif, même si cette définition est un petit peu restrictive. Pour tout vous dire, outre le Sludge - Pop, le combo revendique une musique inspirée par TORCHE, BARONESS et MASTODON. Mais certains y trouvent aussi des réminiscences de QOTSA et MUSE.
Power trio composé de Max Woodhams (guitare, chant), Jamie Benzine (basse, backvoice) et Chris Booth (batterie, chant), ROOTWORK s'est formé à Farmborough fin 2013. Les trois amis se sont rencontrés sur les bancs de l'école et de la fac, ils partageaient une passion pour les musiques lourdes, saturées et mélodiques. Il n'en fallait pas plus pour les réunir en salle de répétition. La mayonnaise a si bien pris qu'en décembre 2015, ils publient leur premier EP Gallow Humour. Ce disque n'était pas juste une compilation de morceaux disparates mais, selon Max Woodham, "Gallows Humour parle de la recherche d'un humour noir dans les mornes et déprimants événements de la vie de tous les jours. Cet EP aborde des concepts comme l'insécurité, la perte de sens, le fanatisme et la désillusion. Parfois il vaut mieux en rire plutôt que de perdre la tête". Enregistré, produit et mixé par le trio, le projet a reçu un bon accueil critique, incitant ROOTWORK à bosser d'arrache-pied sur un deuxième disque, Some Of Us May Never Bloom sorti moins d'un an après. Sur une si petite distance, le groupe n'a pas vraiment fait un pas de géant, et même si les cinq nouvelles compos font preuve d'une agréable variété, on reste en terrain connu. Au niveau des intentions également, ce qui n'est pas vraiment étonnant, l'état du monde ne s'étant pas vraiment amélioré depuis décembre dernier ! Parlant du morceau d'ouverture, "Trust", Max Woodham confie "Trust' is about the many ways in which you can be failed, and the unwavering righteousness that takes hold in response." L'EP aborde cette fois-ci des sujets comme l'échec, la dépression et la recherche de sa place dans le monde. Musicalement parlant, je trouve que ce deuxième effort se rapproche beaucoup de la musique des premiers albums de MUSE. Cela se ressent dans la rage engagée avec laquelle chante Max Woodham, alternant des refrains rentre-dedans avec des couplets plus mélodiques, les riffs plus catchy les uns que les autres, une rythmique pêchue et une construction musicale asymétrique. Complexes, des compos comme "Trust", "Ozymandias" et "Outliers" ne se livrent pas du premier coup et demandent plusieurs écoutes pour être pleinement appréciées. A l'inverse, le single "Zero" est plus direct, donc plus simple à appréhender même s'il est desservi par un chant un petit peu trop sage.
Même si toutes les influences n'ont pas été gommées et si l'on entend parfois un peu de Matt Bellamy et de Josh Hommes dans leurs compos, ROOTWORK parvient à proposer une musique transgenres, cohérente mais surtout chargée de feeling.
Ajouté : Dimanche 30 Avril 2017 Chroniqueur : Rivax Score :     Lien en relation: Rootwork Website Hits: 5886
|