# 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
}
MERCY KILLINGS (usa) - Snuffed Out (2014)
Label : Beach Impedient Records
Sortie du Scud : 30 décembre 2014
Pays : Etats-Unis
Genre : Punk Hardcore
Type : EP
Playtime : 5 Titres - 8 Mins
Allez tiens, soyons fou. Imaginons un peu (et je me mets à votre place, chers lecteurs... puis-je ?) que vous cherchiez un groupe dont les membres ont déjà joué disons dans DIRECT CONTROL, GOVERNMENT WARNING, SICKOIDS, STRIPMINES, BLOOD PRESSURE, AGGRESSION PACT, WASTED TIME, LAST WORDS, VIOLENT OUTBURST, LUNG MATTER & SOCIALCIDE. Ca vous parle ?
Et disons que vous le cherchiez du côté de la Caroline du Nord... Qu'il ait déjà sorti un EP, cru, puissant et efficace.
Alors, en ce cas, je me permets de vous dire que vous avez un sacré bol ! Parce que j'ai exactement ce qu'il vous faut.
Certains esprits chagrins diront qu'une fois de plus, je m'en tire bien avec mon intro. Ce qui n'est pas faux, mais il faut bien une amorce à toute chronique digne de ce nom. Mais laissez moi allez droit au but cette fois ci. Je vous présente aujourd'hui les terribles MERCY KILLINGS, qui reviennent nous compter fleurette après avoir sorti un premier 7'' éponyme en 2013.
Vous l'avez peut être manqué le jour de sa sortie, puisque vous étiez sans doute occupé à faire vos commissions pour préparer le nouvel an. Il est vrai que balancer sur le marché un skeud un 30 décembre, c'est assez osé... Osé, c'est le terme qui convient pour décrire la musique de ces enragés. Si on le prend dans son sens inverse. Car leur Punk Hardcore est classique, très. Mais aussi furieux, très, très. Et à force d'essayer de dénicher des intrus, des olibrius, des tarés, des marginaux, j'avais perdu l'habitude du classicisme. Et franchement, ça fait du bien d'y retourner.
Car les MERCY KILLINGS ne tournent pas autour du pot. Ils jouent une musique rageuse qui va à l'essentiel, qui ne s'embarrasse pas de principes ni d'artifices de production. Celle ci est d'ailleurs ad hoc. Très compacte, brute, elle offre au combo la rugosité idoine. En fait, en faisant tourner en boucle les cinq morceaux de ce 7'', je me suis mis à penser à une version expurgée et street hate de DISCHARGE. A un hommage contemporain à la sincérité et la franchise de MINOR THREAT, mâtinée d'une touche de Punk anglais à la G.B.H/EXPLOITED. Car dès le larsen de "Snuffed Out", tout y est. Rythmique pataude mais appuyée, riff lâché et coulant, petit chorus en bas du manche un peu dissonant, ce jusqu'à l'entrée de la voix, extrêmement vindicative et hargneuse. Phrasé clair et net, riffs qui coupent, up tempo un peu speed, c'est sans bavure.
Le reste du single/EP est à la hauteur de cette entame. Si le tempo accélère volontiers, le principe reste le même. Des plans de guitare simples et directs, peu de breaks mais pile là où il faut, un chanteur qui s'investit dans ses harangues à pleins poumons, et une section basse/batterie qui n'en fait pas des tonnes mais qui soutient l'ensemble d'une poigne de fer. Si vous êtes d'humeur chafouine et que la colère vous guette, jetez vous sur "Fate", "Rot In Your Chains" et "Destroy It Again" qui sont les trois titres les plus enlevés, et qui rappellent franchement le Core US des années 80, avec ses slogans chocs et ses pavés agressifs dans la tronche.
C'est simple. Cet EP sent la Doc Martens à plein nez, les clubs bondés et suintant de sueur, les flyers fait main et le pogo du samedi soir. C'est du vrai de vrai, de l'authentique, sans esbroufe mais avec une vraie conviction. Alors comme je le disais, c'est sans surprise, c'est classique, mais ça tourne, ça cogne et ça fait du bien.
On ne peut pas toujours avoir envie d'originalité. L'efficacité ça paie aussi. Et pour info, un album ou un nouvel EP devrait suivre. Et là, pas d'excuses, pas d'échappatoire. Car vous ne pousserez pas un caddie lorsqu'il sera dispo !
Ajouté : Lundi 20 Avril 2015 Chroniqueur : Mortne2001 Score : Hits: 4736
|