# 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
}
YOUR FAVORITE ENEMIES (ca) - Entre Marées Et Autres Ressacs (2014)

Label : Hopeful Tragedy Records
Sortie du Scud : 21 avril 2014
Pays : Canada
Genre : Noise Rock / Post-Punk
Type : EP
Playtime : 5 Titres - 24 Mins
Au diable courants, marrées et autres ressacs. Cet EP n'est pas une plume qui voyage paisiblement sur un miroir d'eau croupie, c'est une bouteille à la mer, un S.O.S allégorique emporté de Montréal à Brest par le déplacement des eaux de ce que les spécialistes appellent "la dérive Nord-Atlantique". Jadis en quarantaine dans son pays natal, le Canada, YOUR FAVORITE ENEMIES s'exporte désormais. Mars 2013 : Between Illness And Migration heurte les côtes japonaises avant de s'échouer au large de l'Australie six mois plus tard. Et alors qu'il fut frappé d'un amour soudain pour la France en 2007, le groupe décide d'y tenter sa chance au mois d'avril 2014, permettant à ce peuple "cousin" d'enfin se délecter de leur Noise Rock / Post-Punk. Entre Marées Et Autres Ressacs est lancé. Joie.
Sauf que dans le genre chialeuses baudelairiennes, on était déjà suffisamment blindés. Parenthèse tricolore dans une discographie déjà garnie de quelques EP, deux albums et un LP vinyl, Entre Marées Et Autres Ressacs se gargarise d'une poésie bruyante et malheureuse, d'un supposé Noise Rock qui verse davantage dans de l'Emo Pop et d'une transcendance sentimentale aussi mièvre que tiède. En réalité, cet EP n'a pas la profondeur universelle qui bouleverse l'âme de l'oiseau de passage. Barré dans un délire d'une théâtralité plus amusante qu'introspective, il oscille entre le vide assourdissant de l'intro "Satsuki Yami" et la narration geignarde d'"Empire Of Sorrows", incapable de s'énerver correctement malgré le riffing alarmant à 1'26. Beaucoup plus ragoutante, "I Just Want You To Know" aura le mérite de ressembler à un single, avec son lead pénétrant et ses accords chaotiques nimbés d'un Punk / Rock efficace. Ceci étant, j'ai toujours du mal à m'imprégner du chant plaintif d'Alex Foster (qui aurait d'ailleurs le look parfait pour intégrer INDOCHINE, bon point pour lui). Celui qui est censé conduire YOUR FAVORITE ENEMIES sur des autoroutes de spiritualité romancée est finalement le point Godwin d'une caricature d'Emo / Rock psychotrope. Un paramètre peu flatteur pour Entre Marées Et Autres Ressacs, auquel le synopsis proposé avec le disque se permet de prêter des liaisons dangereuses avec NOIR DESIR, SONIC YOUTH, THE CURE et surtout, surtout, le grand, l'immense, le ténébreux Nick Cave, absent mille fois de ce genre de débat à dormir debout. Monts et merveilles devaient se livrer l'entrecuisse ouverte à un auditeur broyé par les alexandrins larmoyants d'"Obsession Is A Gun" et le "Noise" Rock contagieux de nos amis canadiens. Au lieu de ça, le simple fait de chercher un prétexte à cet EP devient un effort cérébral peu engageant. Travail, technique et émotions synthétiques, tout le bordel se regroupe dans ce disque à l'efficacité très très (très) facultative. A tel point qu'on bande déjà mou à l'idée d'un hypothétique split avec TESS.
Solidement cimenté dans un décor où ne cesse de pousser une luxuriante végétation de Post-tout-et-n'importe-quoi, Entre Marées Et Autres Ressacs n'aura que sa belle gueule pour le sauver. Reconnaissons à YOUR FAVORITE ENEMIES la beauté des photos qui servent de toile de fond à leurs pochettes. Car il n'y a que peu de choses à dire de leur musique, pyramide incomplète de bons sentiments, camaïeu bleu light (mais alors super light) de Pop / Rock stridente et morose. Entre jérémiades et autres blablas, l'impression d'un réchauffé émotionnel n'est jamais très loin.
Ajouté : Dimanche 09 Août 2015 Chroniqueur : Stef. Score :    Lien en relation: Your Favorite Enemies Website Hits: 7012
|