# 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
}
PUTREFIED BEAUTY (it) - Promo 2010 (2010)
Label : Auto-Production
Sortie du Scud : 2010
Pays : Italie
Genre : Brutal Death Metal
Type : Démo
Playtime : 4 Titres - 14 Mins
Vous croyez avoir déjà tout entendu ? Vous pensez qu’Angela Gossow est la plus talentueuse vocaliste de Death Metal ? Vous êtes intimement convaincu qu’il n’y a pas plus brutal que KITTIE en matière de girls-band ? En bref, le Metal extrême au féminin n’a plus de secrets pour vous ? Attendez un peu de découvrir PUTREFIED BEAUTY. Si comme moi vous adorez ce genre de challenges, vous resterez sur le cul devant la prestation haute en couleurs de nos quatre italiennes aux minois à vous filer la gaule du siècle. Car en plus d’être de mignonnes demoiselles, les romaines émasculent avec brio tous les clichés machistes et misogynes que véhicule parfois le Brutal Death. Franchement dit, à l’écoute de cette démo sobrement appelée Promo 2010, vous aurez la nette impression de revisiter vos classiques, le tout avec un délicat arrière gout de mozzarella.
J’étais le premier sceptique au moment de m’enfiler cette rondelle. Pourquoi ? Parce que contrairement à la majorité d’entre vous, je n’aime ni ARCH ENEMY, ni KITTIE, ni BENEDICTUM, ni IN THIS MOMENT, ni les autres (par contre, j’aime bien WALLS OF JERICHO). Je trouve en toute honnêteté que certaines dont je tairais le nom n’ont pas un quart du mérite que leur offre généreusement la foule bien-pensante. Au même titre que certains mâles, quelques unes sont nées avec une cuillère en argent dans la bouche (ce qui leur pose des problèmes d’élocution). Et si je ne suis pas là pour faire le procès du Metal au féminin contre le Metal au masculin, qui nous offre aussi de charmants compromis comme CRUCIFIED BARBARA ou WITHIN TEMPTATION, je vais tout simplement faire louange à PUTREFIED BEAUTY qui, par on ne sait quel miracle, vous scalpe le ciboulot. Le vrai mérite ici, c’est d’être un groupe de quatre nanas et de faire aussi bien que les meilleures formations de Brutal Death, essentiellement composées d’hommes. Rien ne manque à leur recette ; bestialité, groove, blast-beats, solos, feeling d’enfer et production old-school mais dévastatrice, tout y est. Je ne saurais que trop vous conseiller de vous rendre illico presto sur leur MySpace pour faire l’expérience car elle en vaut le détour, avec une préférence pour « Ianua Diaboli ». Mais la grande question qui s’impose à chacun d’entre nous c’est « qu’en est-il des vocaux ? ». Car qui dit Brutal Death dit grunts cadavériques ou growls d’outre-tombe. A ce petit jeu, Rosy nous démontre par A + B qu’elle possède une des plus belles gorge profonde jamais entendue. Si son timbre trahit parfois légèrement sa sexualité, la prestance qu’elle donne à son chant nous fait vite pénétrer dans l’univers sombre et torturé des compos. Je vous le répète une fois encore, rien ne vaut l’engouement et la vitalité de ces demoiselles aux sens musicaux aiguisés. CANNIBAL CORPSE peut aller se rhabiller. Je préfère cent fois la vista et le cul(ot) de la blondinette assise derrière les futs aux sempiternelles jérémiades séniles de Paul Mazurkiewicz. Certains diront que c’est mon entrejambe qui parle. Pas faux. Mais ce sont avant tout mes oreilles qui, indépendamment de tout désir sexuel, ont provoqué l’afflux sanguin dans mon membre.
Sans parler de mes relations privilégiées avec les italiennes en général, j’ai eu le plaisir de découvrir que mon addiction à PUTREFIED BEAUTY n’est pas qu’une coïncidence due à leur nationalité ou a d’autres motifs pervertis. J’y vois plutôt une accumulation de circonstances, guidées par un talent musical hors-normes, qui me contraint à tomber sous le charme de nos amies romaines. Je serais d’ailleurs ravi de leur infliger un sévère châtiment corporel si elles ne prennent pas la peine de livrer un full-lenght incessamment sous peu. Mais qui sait, si Glen Benton portait des strings plutôt que des cicatrices symétriques sur le front, peut-être serais-je aussi tombé amoureux de DEICIDE… ?
Ajouté : Mercredi 16 Février 2011 Chroniqueur : Stef. Score : Lien en relation: Putrefied Beauty Website Hits: 9142
|