# 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
}
NEPHREN-KA (FRA) - The Fall Of Omnius (2013)

Label : Kaotoxin Records
Sortie du Scud : 3 septembre 2013
Pays : France
Genre : Brutal Death Metal technique
Type : Album
Playtime : 9 Titres - 44 Mins
Il arrive un moment dans la vie d'un homme où celui-ci doit assumer. Certains devront assumer leur besoin de consommation compulsif, de se mettre à découvert pour un smartphone dernier cri. D'autres devront assumer, au bureau, d'avoir été démasqués en train de camper devant Bercy pour voir Mylène Farmer. Aujourd'hui, le moment est venu pour quatre humains parmi sept milliards d'assumer un choix. L'histoire nous dit déjà que NEPHREN-KA a piqué son nom de scène à NILE (leur premier album s'appelait Amongst The Catacombs Of Nephren-Ka). D'ailleurs, quand The Fall Of Omnius déroule entre tes oreilles, il n'est pas idiot d'y voir un hommage un peu plus poussé qu'un simple choix de blaze. C'était déjà loin d'être anecdotique, mais la convergence de ces Brutal Death (feu Maître Capello, quid de l'accord ?) est de plus en plus flagrante, au fur et à mesure que le temps défile. Revenge And Supremacy, premier EP paru en 2011 balançait à la volée quelques pistes. Cet album s'y engage, et avec quelle force de persuasion !
Toujours brinquebalée entre Brutal Death et Death technique, la musique de NEPHREN-KA va clairement changer de dimension au cours de ces 44 minutes. Qualitativement parlant, je ne suis pas encore entièrement convaincu par la totale homogénéité de ce disque. Mais soyons sérieux et honnêtes : The Fall Of Omnius, c'est du travail de pro. Ok, il y a eu un petit tour de fait dans le temple du Death (le Hertz Studio) pour embellir la chose, mais avant ça, ce sont quatre musiciens doués, techniques, inspirés et affamés qui ont pris soin de coucher leurs idées sur une galette qui ravira le quidam. Peinturluré de science-fiction puisque s'inspirant de l'univers de la saga "Dune" (œuvre de Frank Herbert), ce premier opus est une claque magistrale, un ouragan de décibels qui emporte avec lui complexité du riff et frénésie du blast. Ce constat d'une grande naïveté s'applique à l'arrivée spontanée de "Butlerian Jihad", qui nous permet de plonger dans leur univers tout en appréhendant la palette vocale richissime de Laurent Chambe. Une forme de captation s'opère quand NEPHREN-KA va très vite ou très lentement, comme sur l'ouverture cyclique de "Mastering The Voice". C'est tout ou rien, pas de demi-mesure, pas de compromis et si The Fall Of Omnius en profite au début, une répétitivité assez agaçante s'installera en marge de l'ultra-classique "The Rise Of Omnius". Les vibrations qui émanent de ces compositions, si elles se font intenses au début, provoquent après quelques minutes un égarement de l'esprit qu'une création habile et pernicieuse comme "Legend Of Selim (Pt. 2)" se chargera de remettre dans le droit chemin. Aucun doute, les Auvergnats ont mis le doigt sur cette virtuosité qui rend leur Death technique vraiment technique, mais en oublient un peu ce jeu de textures qui rend les albums du genre vraiment magnétiques, parfois inoubliables.
The Fall Of Omnius fait davantage dans le concentré de tomates que dans la concassée fraiche. C'est fort en goût, à défaut d'être subtil. Et si ce premier album est hyper efficace, c'est aussi parce que ces garçons l'ont voulu ainsi. Organique, percutant mais sans vraie fantaisie, NEPHREN-KA a donc effectivement professionnalisé son entrejeu mais en parallèle, se dévoile comme une formation terre-à-terre. Un peu trop même, quand il s'agit de prendre en compte leur concept thématique, à des kilomètres de tout scénario cartésien. Il y aura un public pour répondre à l'appel, mais pas sûr qu'il se compose de Fremen.
Ajouté : Lundi 21 Avril 2014 Chroniqueur : Stef. Score :     Lien en relation: Nephren-Ka Website Hits: 9002
|