# 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
}
HAUT&COURT (FRA) - La Vie (2012)

Label : Auto-Production
Sortie du Scud : 29 octobre 2012
Pays : France
Genre : Mathcore / Crust
Type : EP
Playtime : 6 Titres - 11 Mins
Je ne comprends pas et je crois que je ne comprendrais jamais. Quel est cet état d’esprit qui pousse des âmes chastes et innocentes à une pareille violence sonore ? Ces âmes ne seraient-elles pas au final moins immaculées que prévu ? Ou est-ce simplement le domaine de l’imaginaire qui est stimulé par des formations de la trempe d’HAUT&COURT ? A l’instar des Transalpins de la fondation THE SECRET, nous voilà en présence d’esprits malades qui refusent tout constat réaliste. Leur musique est indescriptible mais assurément, elle est faite de tripes, de sang et de sueur, avec pour seul horizon le chaos musical. Formé en juin 2012 dans la richissime région alsacienne, HAUT&COURT est une énigme qui aura mis moins d’une demi-année pour concrétiser ses rêves d’effraction anale post et ante mortem. La base. La Vie. Un premier EP vaporeux qui se fera une joie de vous pénétrer spirituellement. A moins que la sentence ne soit d’ordre physique ?
Puisqu’il fallait étiqueter le produit, on a parlé un temps de « Mathcrust ». Un néologisme bien loin de toute réalité artistique. Contradiction pour contradiction, HAUT&COURT prône la vie, la vraie. Ne vous y trompez pas. Et même si cet EP revêt parfois des apparats d’ébène, avec ces guitares très sombres qui rappellent évidement la tournure fuligineuse prise par WAR FROM A HARLOTS MOUTH sur son dernier album (Voyeur), le trio croque dans le gros son à pleines dents. Les courbes s’inversent quand HAUT&COURT se délecte de l’énergie qu’il soutire à son auditorat, au travers de compositions précises et expéditives. D’ailleurs, plus que l’inventivité de cette déflagration, on retiendra le professionnalisme de la bête, qui a tout d’un projet expérimenté. Les voix sont massives et menaçantes, un peu monocordes avec le recul, mais en fin de compte, y’avait-il une alternative plus crédible pour accompagner ce jeu de guitare tantôt autoritaire (« Krokodil »), tantôt voluptueusement débile (« Colision ») ? Assurément que non. Derrière cette schizophrénie latente, il y a la réalité d’un mariage de déraison, célébré un jour de grand beau temps, rien que pour faire chier le dicton. On n’est pas vraiment malheureux, mais La Vie est trop dérangé pour nous combler de bonheur. Situé quelque part entre GAZA, THE DILLINGER ESCAPE PLAN, ION DISSONANCE et un tas de merde, HAUT & COURT fait l’apologie d’un bruitisme intelligent, schématisé avec précision et exécuté sans aucune finesse pour conclure sur un malentendu avec le final jusqu’au-boutiste de « Wasted Time For Wasted Mind ». Surement plus Mathcore que Crust dans l’écriture, La Vie est finalement cohérent d’incohérence et c’est cette ambivalence qui désarçonne. Onze minutes, à peine le temps de tringler un vieux paralytique dans les caves du service pédiatrie que cette vie s’achève déjà. On ne peut pas vraiment affirmer avec certitude qu’elle avait des airs de boite de chocolat, bien que son contenu fort en… émotions, mériterait bien une croix sur le Calendrier, à trois semaines de l’Avent. Comme un cadeau avant l’heure, La Vie joue des coudes au cœur d’une scène aux coudées franches. Et c’est réussi.
Qu’on me pende à leur manière si cet EP est la révélation de l’année. Rien de plus ni de moins qu’un essai brillant et courageux, La Vie ne véhicule assurément pas de belles valeurs. Mais dans ce monde ingrat ou le fort crève le faible, ubi maior, minor cessat, HAUT&COURT a pris les devants et a déjà su imposer son franc-parler, a défaut de pouvoir faire parler franchement sa délicatesse. Cachée ou inexistante, on ne demande pas mieux que de ne jamais en entendre parler, si la suite des évènements est du même acabit.
Sénèque ne disait-il pas que « la vie ressemble à un conte ; ce qui importe, ce n'est pas sa longueur, mais sa valeur » ? Au fond, il devait être un sacré bon chroniqueur.
Ajouté : Jeudi 29 Novembre 2012 Chroniqueur : Stef. Score :     Lien en relation: Haut&Court Website Hits: 14368
|