# 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
}
R.I.P. (usa) - In The Wind (2016)

Label : Totem Cat Records
Sortie du Scud : 14 mars 2016
Pays : France
Genre : Doom Metal
Type : Album
Playtime : 10 Titres - 54 Mins
Le Doom actuel ressemble de plus en plus à une vaste fumisterie. Si nombre de groupes se réclamant du Doom citent allègrement BLACK SABBATH dans leurs référence, ils ont parfois perdu de vue que les premiers albums de BLACK SABBATH développaient une ambiance reposant sur la musique, le chant, les paroles et un certain climat. Ce postulat étant admis, il ne suffit pas d'une rythmique coulée dans le plomb, un growl enroué et une guitare léthargique pour sonner Doom. Si l'on avait tendance à oublier tout cela à l'écoute d'une production actuelle aussi encombrée qu'uniforme, les portlandais de R.I.P remettent les choses au clair avec leur debut album, In The Wind.
Après des années passées à matraquer Portland et sa région avec leur son tranchant, Fuzz (chant), Angel Martinez (guitare), Jon Mullet (basse) et Willy D (batterie) ont décidé de laisser sur bande leur propre testament Heavy Metal, laissant dans leur sillage un amas de carcasses chancelantes. In the Wind referme le cercueil sur les tendances et exhume l'esprit Doom originel : pourquoi être obsédés par la lenteur et les riffs sous-accordés, quand il s'agit avant tout de mort, terreur, cuirs usés et morceaux Heavy au possible.
Le disque est habillé d'un artwork splendide et glaçant signé par Adam Burke où la mort pose devant une immense nécropole noyée dans un brouillard polychrome. C'est sinistre, sulfureux et très rétro. Mais rassurez-vous, c'est du rétro respectueux, pas un de ces projets vintage moisi comme il en pousse treize à la douzaine de nos jours. Si R.I.P tire sans doutes possibles son essence de BLACK SABBATH, ST VITUS ou PENTAGRAM, In The Wind est tout sauf un tribute aux gloires du passé. R.I.P n'est pas non plus un de ces groupes qui utilisent le vintage comme argument marketing en mode "on joue sur du matos qui a servi à l'enregistrement de tel vieux nanard". Au contraire, R.I.P a manifestement compris que c'est souvent dans les vieux pots qu'on fait les meilleures soupes, à condition d'y ajouter quelques jeunes carottes. Ici, il sera donc question d'une musique aux relents Sabbathiens, portée par une rythmique lourde comme il faut, enveloppée par une guitare qui balance des riff de killer comme "Tremble" et son petit air de "Green Machine" (KYUSS), "Black Leather", l'un des morceau les plus Heavy de la galette ou "Smoke & Lightning". Clair, le chant envoie des paroles morbides et glauques à souhait avec des intonations bien choisies, à l'image de ce que faisait si bien le Ozzy Osbourne de l'âge d'or du SAB. Les morceaux prennent leurs temps pour installer leurs ambiances en dépassant souvent les 6 minutes mais évitent de sombrer dans un train train lénifiant, R.I.P ayant également le bon goût d'alterner les ambiances et les tempos comme sur "In The Wind Part 2" et son solo cristallin ou plus encore sur "The Tombstone", un court interlude instrumental joué à la slide guitar. Bien produit sans être surproduit, bien naturel et organique sans sonner comme du DIY enregistré dans un soubassement inadapté, bien construit et équilibré, In the Wind est un debut album d'une étonnante maturité.
Dans le champ de ruines qu'est le Heavy Metal moderne, jonché de groupes aux abysses de l'originalité et jouant des riffs à un dollar sur des amplis grand luxe, les rockers sans foi ni loi de R.I.P. font office de bol d'air frais. En 54 minutes et dix chansons, ils démontrent qu'il est encore possible de faire un disque Doom original en 2016 et ça c'est une excellente nouvelle pour tous les fans qui, comme moi, trouvent que le serpent se mord la queue depuis quelques années déjà.
Ajouté : Lundi 06 Juin 2016 Chroniqueur : Rivax Score :     Lien en relation: R.I.P. Website Hits: 7072
|