# 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
}
KIP WINGER (usa) - Down Incognito (1999)
Label : Frontiers Records
Sortie du Scud : 26 octobre 1999
Pays : Etats-Unis
Genre : Hard Rock
Type : Album
Playtime : 13 Titres - 53 Mins
Pour en revenir à une discussion que nous avions il y a peu entre membres du staff, lorsque l’objectivité se teinte d’enthousiasme total, cela aboutit plus à une déclaration d’amour qu’à une critique pure. Et Dieu sait si il y a longtemps que je voulais déclarer ma flamme artistique à Kip WINGER.
Je ne sais pas d’où vient cette passion pour Kip, ou plutôt si, je ne le sais que trop bien. Parce qu’il est l’homme que j’aurais toujours voulu être. Beau à se damner, danseur émérite, compositeur au talent sans limites, et chanteur guidé par les anges.
Mais au lieu de me donner des complexes mêlés d’animosité déplacée, il a suscité chez moi une admiration sans bornes. A cause de sa grâce. Et aussi à cause de son parcours.
Rien ne lui a été épargné. La gloire du temps de WINGER, le groupe, et ses hits faciles, de « Seventeen » à « Easy Come, Easy Go », les tournées remplies de groupies au bord de l’apoplexie, une exposition radiophonique et télévisuelle permanente, jusqu’à l’arrivée du Grunge.
Et là, le massacre. Il devient la figure emblématique d’un Hard-Rock de poseur que MTV se plait à tourner en ridicule. Le désamour total envers un style, représenté à tord par un homme qui n’a jamais rien cherché d’autre que de faire partager ses notes avec le public. Beavis et Butthead finiront le travail à grands coups de blagues de potaches qui ne m’ont jamais fait rire. Uncool à vie, exit Kip. Bonjour les tignasses crades et les chemises de bûcherons.
Mais c’est trop facile les gars, parce que certains n’oublieront jamais. Car contrairement à cette chaîne de télé qui n’a de musicale que l’appellation, Kip est toujours crédible, et n’a jamais couru après la gloriole.
La perte de sa femme achèvera de l’emporter sur la pente de la tragédie, mais il s’est relevé, pour pondre ce chef d’œuvre ultime qu’est Down Incognito.
J’abhorre par habitude les albums acoustiques. La plupart du temps, ils ne sont qu’une justification facile à l’exploitation de fonds de tiroirs qui auraient du y rester. Quelques tubes repris sur un mode mineur, accompagnés de reprises approximatives qui ne font rire que leurs interprètes. Sauf qu’ici, chaque harmonique est justifiée, et le bonheur rendu, au centuple.
Entendre Kip hurler le refrain de « Spell I’m Under », chanson écrite pour sa femme vous file la chair de poule et les larmes aux yeux. Si l’amour est une constellation de notes étoilées écrites avec le cœur, celui de Kip pour son épouse occupe la moitié du ciel.
Je pourrai détailler les pépites de cet album une par une, il y aurait matière à une thèse de plus de 100.000 mots. Mais les mots sont vains pour expliquer ce qu’on ressent lorsque l’on écoute cet album. On peut dire à un enfant qu’on l’aime plus que tout, mais le rassurer quand il a peur, l’aider à faire ses devoirs, et sacrifier sa vie pour prolonger la sienne sont plus de preuves que n’importe quelle encyclopédie sur le langage pourra fournir.
Et les mots me manquent justement. Emporté dans un tourbillon de sensations, on essaie de se raccrocher à quelque chose de rassurant pour ne pas tomber dans le vide.
Quand je vais mal, j’écoute la voix de Kip qui me rappelle que la vie, même si elle est le plus souvent très cruelle, peut aussi offrir des compensations merveilleuses.
Down Incognito est le coin de Paradis ou je me réfugie quand la pluie de l’âme bat trop fort. Et je vois des anges courir et rire auprès d’un homme jouant de la guitare, simplement. Et qui chante une mélodie plus pure que le jardin d’Eden.
Kip WINGER. Chante encore pour moi…
Ajouté : Lundi 16 Juin 2008 Chroniqueur : Mortne2001 Score : Lien en relation: Kip Winger Website Hits: 10365
|