# 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
}
INFEKTED (FRA) - Spei Micant (2014)

Label : Auto-Production
Sortie du Scud : 17 février 2014
Pays : France
Genre : Metal / Deathcore
Type : Album
Playtime : 9 Titres - 43 Mins
Je stoppe ma course, regarde autour de moi, haletant mais serein. Les zombies que j’observe depuis de longues années à travers les vitres du métro ont le teint gris, le regard rivé sur leurs smartphones. Une fois libérés de leur capsule mobile, ils entretiennent leur cancer en tirant sur des cigarettes contrefaites et foncent tête basse vers un confinement qui tient de la quarantaine : l’open-space. Je peux désormais respirer de grandes bouffées de particules nocives, l’infection promise par INFEKTED ne s’est pas répandue à la première morsure. Le paysage d’apocalypse dépeint par ces Auvergnats sur leur premier album, Hexakosioihexekontahexa (que je n’écrirai pas deux fois) donnait le tournis. Néanmoins, l’anonymat de leur prestation très peu remarquée tenait en laisse le virus, qui a trouvé en Spei Micant un nouveau porteur sain, apte à faire un plus grand nombre de victimes. A l’heure où je vous parle, le monde alentour trace sa route sans se soucier de son prochain, mais la situation est évolutive et ce second opus pourrait être la fameuse clé recherchée par les adeptes du transhumanisme.
Encore faudrait-il pour inoculer le virus qu’INFEKTED soit d’une précision chirurgicale, en plus d’avoir le vice au corps. J’attendais les propositions de Spei Micant avant de me prononcer et le résultat est sans appel. Si le Metal de ces français est d’un acabit honorable, l’écrin qui le contient souffre d’une laideur repoussante qui ne rend pas service à leur inventivité et à leur concept. Le design de leur premier album était déjà très moche, mais quand la sobriété rencontre l’inesthétique, c’est une ode au disgracieux qui est déclamée. Le jour où INFEKTED sera en harmonie de corps et d’esprit, de fond et de forme, des oreilles aux yeux, quelque chose d’infiniment puissant se passera. En attendant, la seule chose qui me réjouit ici est la musique, car elle me permet de constater que depuis bientôt quatre ans, ces garçons ont énormément progressé. Les structures sont plus puissantes, le rendu plus massif, digne de la production « dans ta gueule » dont il jouit (et entièrement fait-maison). Ce groupe, qui s’est défini au début de sa carrière comme pratiquant du « Deathcore », me faisant ainsi saliver, fait enfin honneur à cette appellation, rivalisant de breakdowns écrasants qui parlent tour-à-tour au fan de THE DEVIL WEARS PRADA et de MAROON que je suis (il y a d’ailleurs une étrange ressemblance entre celui d’« Inmate » et le final d’« A New Order » des Allemands). Je n’ai cependant pas oublié les aspérités sudistes (PANTERA, LAMB OF GOD…) et le grain groovy du précédent opus, et c’est avec satisfaction que je constate qu’INFEKTED accommode sans cafouiller cette spécificité au service d’un Deathcore croustillant moucheté de riffs et voix Death Metal. Au contraire de son prédécesseur, Spei Micant connaît quelques temps forts bien répartis. « Dust » pour commencer, « Incubation » en guise de transition et « Hemoptysis » en conclusion porcine. Bien que davantage calibrées et concentrées sur des refrains percutants, les autres compositions font le boulot sans vraiment rivaliser d’ingéniosité (« Annuit Coeptis »), ce qui confère à ce second full-lenght un caractère homogène pas vilain, en phase avec l’univers granuleux et impénétrable d’INFEKTED.
Ma principale satisfaction quant à cette sortie concerne donc son rendement ultra-efficace et la maturité affichée par Toad et ses copains depuis l’album dont j’ai promis de ne pas réécrire le nom. J’étais forcément curieux de connaître l’évolution de la maladie depuis son premier stade, et je dois reconnaître que sans manifester pour l’instant le moindre symptôme, je suis agréablement surpris. INFEKTED est sur le bon chemin, et si le processus de contamination n’est pas forcément engagé à grande échelle, les Auvergnats pourront se consoler avec de petits bonheurs plus terre-à-terre, comme ce Metal engagé et performant dont ils sont les uniques créateurs.
Ajouté : Vendredi 25 Juillet 2014 Chroniqueur : Stef. Score :     Lien en relation: Infekted Website Hits: 11808
|