# 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
}
BREACH (se) - Outlines (1994)

Label : Burning Heart Records
Sortie du Scud : 1er juin 1994
Pays : Suède
Genre : Post Hardcore
Type : Album
Playtime : 8 Titres - 26 Mins
Et voilà, la boucle est bouclée. A l'envers certes, comme un Tour de France qui commencerait à Paris, mais elle est bouclée. J'ai fini mon travail, et j'espère que cette quasi intégrale de la discographie de BREACH vous aura donné envie de les découvrir, ou de vous replonger dans une poignée d'années de créativité intense. Alors oui, j'ai volontairement laissé des trucs de côté, des singles, des split, certains Ep's, mais j'ai jugé en toute conscience qu'ils n'apportaient pas grand chose à l'affaire. C'est mon droit, et selon moi, tout travail de longue haleine se doit d'être cohérent et homogène.
Mais avant de mettre un point final à ces fouilles, il me fallait terminer par le commencement. Là où tout à débuté, le premier jet, les balbutiements. Et dans le cas de BREACH, le mot n'est pas choisi au hasard. car à l'instar de Friction, et même encore plus, Outlines est un disque à part dans leur parcours.
Si la lecture des chroniques de Kollapse, Godbox ou Venom est encore fraîche dans votre mémoire, sachez qu'aucune des comparaisons, qu'aucun des repères qui y furent employés ne le seront ici. Car Outlines, sorti en 1994 à les mêmes défauts que son successeur longue durée. alors reprenez la review de celui-ci, amplifiez les reproches formulés, et vous obtiendrez le laïus qui va suivre. Si vous êtes trop fainéant pour le lire.
Aucune des qualités à venir des suédois n'est présente ici. Car Outlines, aussi bon (ou moyen, c'est selon) soit il, n'est qu'un album de Hardcore teinté de Metal assez anonyme. On ne retrouve dans ces huit titres ni l'expression de colère incroyable, ni la rythmique imparable, ni la basse brillante et lourde, ni les riffs saignants, ni le chant en apoplexie qui feront des cinq derniers travaux du groupes des incunables. Ici, tout est trop carré, trop classique, trop "respectueux" des codes. Outlines pourrait être un projet de B-sides d'HELMET, tant la ligne conductrice est calquée sur les impulsions de Page Hamilton. Mais dans une variation plus calme, plus centrée, plus "polie". Car si Hamilton a toujours su sortir de son chapeau des riffs mécaniques à la limite de l'Indus, ceux de BREACH sont désespérément crossover, sans imagination, sans prise de risque, sans tout ce qui fera leur magie quelques années plus tard.
Non, Outlines n'est pas mauvais, loin de là. Il est juste largement en deçà des disques les plus remarquables des suédois. A vrai dire, il n'a même rien à voir avec eux. Il est rempli de titres qui sauraient satisfaire bon nombre de groupes moins talentueux (la liste est TRES longue), est bien produit, juste assez long pour ne pas lasser, mais comme je le disais, il reste trop timoré, il n'ose pas assez. La production trop Metal une fois de plus (le même travers que Friction) polit trop les guitares, aseptise la batterie, oublie la basse dans le mix, et Tomas n'avait pas encore ce grain de voix incomparable capable de transcender des motifs trop convenus. Il n'empêche que certains morceaux valent le détour, ne serait ce qu'à titre de comparaison, d'évolution indéniable.
"Despite The Fact", en ouverture est solide. C'est aussi le plus long de l'album, et son léger parfum SUICIDAL TENDENCIES n'est pas désagréable. C'est un morceau typique du Hard Core des années 80, celui qui ne refusait pas de s'acoquiner avec le Metal le plus plombé pour accoucher d'un mélange efficace et cru.
Le même schéma se retrouve par hasard de façon symétrique à la fin du EP, avec un "Potential Failure" qui n'aurait pas dégoûté MADBALL ou YOUTH OF TODAY.
"Thoughts To Rebuild", la plus archétypale du lot, nous ramène aux grandes heures de 87/88, et de combos comme ACROPHET, qui établissaient un pont entre le NYHC et le Thrash de la Bay Area. Il existe pire références non ?
Au niveau réussites, soulignons le climat sombre de "Predict a Life", lourd, au tempo changeant et aux guitares dérangeantes, agrémentées d'un chant roublard et scandé, ainsi que "Profits" encore une fois plus HELMET que nature.
Mais il est clair que si vous recherchez un "Arranged Heart", un "Mr Marshall" ou un " Path Of Conscience", la quête risque d'être longue.
Et là n'est pas le propos. Après tout, qui oserait comparer Dillinger Escape Plan à Miss Machine, Mate. Feed. Kill. Repeat. à All Hope Is Gone, ou Nervous Breakdown à In My Head ? Oui vous non plus n'oseriez pas.
Alors Outlines est à prendre pour ce qu'il est. Un "bonjour" lancé des terres nordiques, un galop d'essai, une mise en jambes, une enfance tranquille avant une adolescence turbulente et un âge adulte mouvementé.
Et ainsi s'achève ma description de l'histoire d'un des plus grands groupes que le Post Hardcore ait connu, et que malheureusement l'histoire semble avoir oublié.
Mais refaites la à l'envers, et réécoutez tout, à partir de ce point de départ. Ne prenez pas le truc à l'inverse comme moi. Et vous aurez à portée de vos oreilles tout un pan de la formidable épopée de la musique extrême, sur une suite temporelle cohérente, qu'il ne tiendra qu'à vous de faire revivre.
Partagez avec ceux qui ignorent, discutez en avec les initiez. Faites comme moi. Je n'ai pas écrit tout ça pour qu'on me remarque moi, mais pour que vous les remarquiez eux.
Car moi, je ne fais qu'écrire sur ce qui s'est déjà passé. BREACH l'a vécu, et l'a fait.
Ajouté : Mercredi 20 Août 2014 Chroniqueur : Mortne2001 Score :     Lien en relation: Breach Website Hits: 9748
|