# 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
}
TERRORDROME (gr) - Vehement Convulsion (2008)

Label : Grindethic Records
Sortie du Scud : mars 2008
Pays : Grèce
Genre : Brutal Death Metal
Type : Album
Playtime : 11 Titres - 29 Mins
« Dis Stef, t’en as pas marre de te faire que du Brutal Death ? J’veux dire, c’est un monceau de fèces inaudible ce truc, comment t’arrive à faire pour affirmer que ça c’est mieux que ça ? Tout se ressemble, c’est vide et difforme. » En effet, il m’arrive aussi des fois de me remettre en question de manière virulente. C’est vrai que ces derniers temps, j’en ai entendue des vertes et des pas mûres. Comme TERRORDROME tiens ! Ça fait un petit moment que leur nom me trotte dans la tête et le tour effectué sur leur MySpace ne m’a pas vraiment aidé à me faire une opinion plus objective sur eux. C’est pour ça que le mieux, c’est d’essayer. Et tant pis pour la diversité. Pour les présentations, TERRORDROME nous viens d’un pays où le Metal, c’est pas la musique nationale. Oh que non ! On y danse le sirtaki en mangeant de la feta, de la moussaka et du tzatziki. Et quand oncle Zorba a vomi son verre d’ouzo, on peut filer en douce pour visiter le Parthénon (ou ce qu’il en reste). Si là vous n’avez pas encore compris que nos joyeux lurons viennent de Grèce…
Marchant sur les pas de leurs illustres ancêtres, j’ai nommé ROTTING CHRIST, SEPTIC FLESH, NECROMANCIA, ASTARTE et NIKOS ALIAGAS, TERRORDROME n’a rien pour plaire. Ils ne sont pas bien beaux, ils n’ont pas une discographie bien riche (à peine un split et un MCD) et surtout, ils font du Brutal Death. Rien que l’évocation de ces deux mots donne à certains de véhémentes convulsions mais est-ce que ce sera le cas avec Vehement Convulsion, leur premier CD ? Dissection d’un acte de bravoure dans un pays en flammes. Le rapport est flou et l’anachronisme flagrant, mais ce qui est en flammes, c’est surtout les phalanges de Sakis Chatzitakis (guitare). Seul guitariste de la formation, il assure à lui tout seul la qualité technique de l’opus, avec une agilité et une foudre exemplaire. On ne peut guère dire qu’il fait preuve d’une ingéniosité sans faille, mais sa vista en déstabilisera plus d’un. Autre très bonne surprise, le chant de Peter Ouzounis (vous ai-je dis que j’aimais bien le Ouzo ?) qui oscille entre pets, rots, gargarismes et raclement d’œsophage. Une façon comme une autre de dire que même si on peut être blasé par ces redondances, les oreilles attentives auront pris soin de constater que Peter n’est pas monocorde. Il possède entre autre dans son répertoire de puissants grunts et des grouinements porcins. Suffisant pour aérer sa performance. Par ailleurs, il nous arrive parfois de nous demander si TERRORDROME n’a pas le cul entre la chaise du Brutal Death et celle du Technical Death, puisqu’un crédit important est laissé aux accords et à la fluidité technique. Niveau tempo, nous sommes aussi comblés avec l’esprit du groove qui hante certaines plages (« No Oral Hesitations », « Festivity Of Clitoris Licking » -oui, j’avais omis de dire qu’ils étaient aussi un brin machistes et qu’ils ne traitaient pas toujours la gent féminine avec l’égard qui devrait lui est accordé-). L’occasion de préciser que si ça reste très brutal, ça n’en demeure pas moins plus accessible qu’a l’accoutumée. A condition d’être "open".
Surprenants grecques ! Ils sont peut-être laids mais musicalement, ils ne sont ni manches, ni gauches, ni eunuques. C’est toujours le même monceau de fèces ambulant, mais c’est sans trop de problème que je crie au et fort que ce monceau là est bien plus digeste que la majorité. C’est pour ce genre de bonne surprise qu’on aime le Brutal Death !
Ajouté : Samedi 24 Janvier 2009 Chroniqueur : Stef. Score :     Lien en relation: Terrordrome Website Hits: 10117
|