# 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
}
BLOOD RED THRONE (no) - Come Death (2007)

Label : Earache Records / Pias
Sortie du Scud : 27 août 2007
Pays : Norvège
Genre : Death / Thrash Metal
Type : Album
Playtime : 9 Titres - 42 Mins
Les chirurgiens norvégiens de BLOOD RED THRONE franchissent une nouvelle fois l’accès de la salle d’opération de la clinique privée de Kristiansand où se trouve la patiente dans un état plus que critique. Ils s’apprêtent à pratiquer de nouveau une opération lourde et délicate, pouvant laisser des séquelles impérissables à la souffrante. Tchort (ex-EMPEROR, CARPATHIAN FOREST, GREEN CARNATION), en sa qualité de praticien en chef se retrouve aux manettes entouré de ses plus proches assistants, i.e. l’anesthésiste, l’équarisseur en chef et les infirmiers devant exercer une périlleuse vulvectomie. Munis de leurs habituels écarteurs, rongeurs à disque, pinces, maillets, limes, ciseaux-burins et de tout l’attirail du «petit chirurgien en folie» de chez Playskool, le quintet norvégien s’en donne à cœur joie durant cette opération d’une quarantaine de minutes découpées en neuf actes de pure boucherie poussivement sanguinolente et aussi trash et puante qu’un évidage en la règle d’un chaenichthys.
Nouveau coup sanguin de la bande à Tchort donc avec ce dernier opus en date, Come Death, la quatrième opération à vif de ces brutes nordiques. BLOOD RED THRONE, c’est un groupe un peu à part en Norvège, errant hors des sentiers balisés de l’omnipotente culture Black Metal car depuis leur début, les quatre docteurs ont toujours professé un Death Metal plus proche de celui des Etats-Unis que de celui de leur voisin honni la Suède aux accents plus mélodiques. Ici, la mélodie est au service de l’éviscération.
En tant que tri fouilleurs de boyaux évidents, BLOOD RED THRONE n’a pas peur de se salir les mains et de prendre des bains de sang. L’équipée sauvage échappée de l’hôpital nous assène avec remous et moult violence ses rasades d’hémoglobine fraîchement aspirée de leurs proies éventrées. En terme de chirurgie neurochirurgicale, BLOOD RED THRONE affectionne particulièrement une exécution radicale dans ces compositions. On dira même que cela constitue sa principale marque de fabrique. Toujours dans l’urgence de l’exécution implacable et clinique de ces mélodies, BRT délivre avec ce Come Death un rapport d’autopsie de première catégorie. Tout les ingrédients de la dissection musicale et les codes du Death Metal Thrash y sont : des riffs et des rythmiques tranchants et lacérant, des plans de batterie autoritaires et un souffle délirant imprègne cette œuvre de tout son long.
D’autre part, les norvégiens conservent leur manière de composer originale en incorporant dans leurs arrangements des mid tempi lourds et des lignes de basse profondes et claquantes mises en avant auxquels les growls et vociférations n’échappent pas. Un certain feeling et du groove font également partie du tableau. Les morceaux de choix «Slaying The Lamb», l’énervée «Rebirth In Blood», la Thrashy «Guttural Screams», la groovy «No New Beginning» ou la charnelle «Disincarnated» montre que vous êtes en possession d’un bon album de Death comme il faut. Tchort et son équipe vous accueille à bras ouverts dans leur clinique. Aucun risque, ils sauront vous convertir à la chirurgie destructrice de tissus humains de l’équipée sanguinolente BLOOD RED THRONE !
En résumé, BLOOD RED THRONE sait ce qu’il fait et où il va. On assiste à un déferlement de violence et de rage dont le quintet nous a toujours habitué. Un Death Metal aux effluves Thrash de haute volée et jouissif. Il n’en demeure pas moins que les natifs de Kristiansand proposent là un album certes classique, homogène, solidement construit mais pas génial non plus. Toujours est-il que BLOOD RED THRONE reste au rendez-vous et sait faire le principal : exécuter des morceaux cohérents et qui restent en mémoire. A qui le tour ? Vous reprendrez bien un petit coup de bistouri ?
Tracklist : 01. Slaying The Lamb 02. Deranged Assassin 03. Rebirth In Blood 04. Guttural Screams 05. Taste Of God 06. No New Beginning 07. Come Death 08. Disincarnated (Gorguts Cover) 09. Another Kill
Ajouté : Mercredi 31 Octobre 2007 Chroniqueur : Loki Score :     Lien en relation: Blood Red Throne Website Hits: 18641
|