# 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
}
NILE (usa) - Ithyphallic (2007)
Label : Nuclear Blast / Pias
Sortie du Scud : 23 juillet 2007
Pays : Etats-Unis
Genre : Brutal Death Metal
Type : Album
Playtime : 12 Titres - 57 Mins
On ne présente plus ces mastodontes du Brutal Death de la scène internationale. En quelques albums, les Floridiens de NILE se sont imposés comme les leaders dans leur genre. Comme bon nombre de groupes floridiens avant eux tels que MORBID ANGEL ou CANNIBAL CORPSE, à croire que les Everglades sont un vivier permanent octroyant à foison des groupes à la qualité supérieure. Niveau musique, on connaît également la chanson avec ces tempi et structures à la MORBID ANGEL et ces atmosphères orientales sur fond de références à l’Egypte des Pharaons. Il en ressort à la fois une musique brutale et planante à la fois, à la technicité et à la vitesse parfois hors du commun. Toujours innovant, Karl Sanders, leader et âme du combo américain emploie parfois des guitares à 12 cordes acoustiques dans le but de rendre l’ambiance plus pesante et plus sombre, s’accordant au diapason avec les thèmes évoqués. En somme, tout au long de sa carrière, NILE a toujours proposé une musique nouvelle et originale au travers d’albums cultes tels Black Seeds of Vengeance, In Their Darkened Shrines ou le dernier en date Annihilation of The Wicked. Un savant mélange de brutalité et d’envoûtement ! Inutile de dire donc que ce septième album de NILE est l’un des plus attendu de cette année 2007 car NILE est une certaine idée du Brutal Death. Mais trêve de présentation, rentrons de ce pas dans le vif du sujet avec cet Ithyphallic à l’artwork toujours aussi propre chez le combo floridien. Majestueux est un adjectif que l’on peut retenir dès le début comme nous l’indique l’intro du morceau «What Can Be Safely Written», on reconnaît d’emblée le style «Nilesque». Puissance et impartialité. Le ton est donné. D’attaque, la batterie tenue de main de fer par George Kollias est mise en avant. On retrouve l’atmosphère chère aux membres de NILE, surtout lors du break intervenant autour de la quatrième minute. Impérial et gigantesque, ce morceau d’ouverture à l’ambiance pesante et grandiloquente nous laisse augurer une suite digne de ce nom. Sanders et Toller-Wade enchaînent sur une pièce agressive et ultra brutale nommée «As He Creates So He Destroys» où l’apparition de soli vient habiter ce morceau tout droit sorti des catacombes des pyramides de Nubie. On retrouve ces riffs affilés qui font la marque de fabrique de NILE. Le titre éponyme quant à lui est une pièce grandiose à l’atmosphère égyptienne, bref, un morceau magistral.
Continuons, le morceau «Papyrus Containing The Spell To Preserve Its Possessor Against Attacks From He Who Is In The Water» est le titre à rallonge tant attendu, véritable institution chez le combo floridien. Avec «Eat of The Dead», NILE ralentit la cadence en proposant ce titre lourd et pesant avant de balancer ses pics d’accélérations ravageurs agrémentés d’harmonies de guitares efficaces et prenantes. La piste suivante «The Essential Salts» se révèle être ravageur et destructeur. «The Infinity Of Stone» est l’interlude instrumental qui arrive à point nommé pour diluer l’atmosphère brutale et chargée envahissant nos conduits auditifs. Ensuite, avec «The Language Of The Shadows» l’agression sonore reprend son droit en compagnie de ce déluge de riffs assassins accouplés à ces vocaux sortis d’outre-tombe. Cependant, on a l’impression que NILE a énormément et visiblement beaucoup misé sur l’aspect brutal et technique de sa musique au détriment des atmosphères qui faisaient leur charme. Bien évidemment, ces ambiances sont toujours présente comme en témoignent le titre outro «Even The Gods Must Die» mais il manque tout de même quelque chose à cet album d’assez indéfinissable. Il faut du temps pour s’immerger dans cet opus et se laisser apprivoiser par les arrangements parfois déroutants de NILE. Ce n’est certes pas leur meilleur album loin de là, mais les américains maintiennent le niveau pour le moins élevé. Comme à l’accoutumée, album compact et homogène, la production signé par Neil Kernon offre toujours un travail propret et lisse. Cependant, l’album ne répond pas tout à fait à nos attentes. S’est-on mis trop de pression suite à l’énorme Annihilation of The Wicked ? Il manque un flagrant d’émotion, pas de morceaux phares portés en avant sur cet album. Très violent, peut-être ne retrouvons plus ce grain de folie qui faisait les beaux de jours de Black Seeds in Vengeance et In Their Darkened Shrines.
Ajouté : Vendredi 21 Septembre 2007 Chroniqueur : Loki Score : Lien en relation: Nile Website Hits: 12689
|