# 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
}
NINE INCH NAILS (usa) - The Downward Spiral (1994)

Label : Nothing Island
Sortie du Scud : 8 mars 1994
Pays : Etats Unis
Genre : Introspection effrayante
Type : Album
Playtime : 14 Titres - 65 Mins
Piste Multimédia présente sur le CD
« Mon Amour,
Aujourd’hui, j’ai rêvé que j’étais cette voix dans ta tête, que je te contrôlais. J’ai rêvé que j’étais ton amant, que je te contrôlais. J’ai rêvé que j’étais le plaisir que tu me prodigues, que je te contrôlais. Que j’étais la haine que tu cachais…Je ne suis plus qu’un tas d’os brisés, je suis tout seul…que suis-je supposé faire ? Tu m’as abandonné. Mon compagnon s’est cousu les yeux, car il avait peur de voir, il a essayé de me dire ce qu’il y avait à l’intérieur de moi, puisqu’il a les réponses à ma curiosité !
Je n’aime pas ce que je vois, ce que je sens, je rêve de tout voir s’écrouler. Tout ça me tache comme ce sang sur mes dents, je les emmerde tous. Aide moi, je n’ai même plus d’âme à vendre. Je veux te baiser comme une bête, je veux te sentir de l’intérieur, tu m’as emmené près de Dieu. Tu es de leur coté n’est ce pas ? Tu crois tous leurs mensonges ? Ils n’ont rien à perdre, et ils ont réussi à t’y faire croire…
Je suis coincé dans ces rêves et je suis en train de devenir celui que tu connaissais et qui avait des pensées cachées. J’essaie de m’échapper, mais je suis coincé. Je ne veux pas les écouter, mais leurs voix sont trop distinctes. J’ai vécu tellement de vies dans ma tête, je sais que tu t’en fous, après tout, c’est pas grand-chose, non ? Je suis si malade, peut être est ce tout ce qu’il me reste ? Peut être que je n’ai pas le choix ?
Le mec avec le gros flingue m’a encore mis à genoux. Il a sorti sa grosse bite, m’a mis le pétard sur la tempe, et m’a demandé de le sucer. Je lui ai dit « vas y, tire ! », mais rien ne pouvait l’arrêter…J’ai besoin de toi, je rêve de toi, tu m’as perdu, tu me détestes, alors achève moi…Ma merveilleuse menteuse, ma précieuse salope, tu es mon infection, moi si impur.
Je ne savais pas que c’était si facile en fait, de mettre un flingue sur ce visage, et bang !!! Tous ces problèmes résolu par le simple impact d’une balle ! Que suis-je devenu, toi ma meilleure amie, tous ceux que j’ai connus, ont fini par partir. Je peux tout te laisser, mon empire de sable, moi aussi je te laisserai tomber, je te ferai souffrir.
Si je pouvais tout recommencer, à des milliers de kilomètres, je trouverai une solution…
Je t’aime »
En 1977, Alan VEGA balançait à la face du monde les aventures de Frankie Teardrop, effrayante descente aux enfers de 10 minutes, où l’horreur le disputait à la froideur. En 1975, Neil YOUNG consacrait un album entier, Tonight’s The Night, à la mémoire de chers disparus. Un disque traumatique ou les larmes de l’auteur semblaient transpirer des sillons. Deux ans plus tard, Roger WATERS se montre tel qu’il est, nu, désarmé face à une société qu’il déteste au plus haut point. Il ne réussira jamais à détruire ce mur qu’il a mis tant de temps à construire.
En 1994, un musicien approche plus du génie total à lui tout seul qu’une myriade de groupes avant lui. En nous contant la triste déchéance d’un homme jusqu’à son suicide, il nous implique dans un cauchemar sans fin. Tous les sons, toutes les ambiances, tous les mots semblent sortis d’un esprit à jamais possédé par la tristesse, la solitude, la résignation.
Si cette pièce noire qui nous sert de conscience portait un nom, nous l’appèlerions The Downward Spiral.
Léo FERRE chantait qu’avec le temps va, tout s’en va. Il n’en est rien. Le vide reste et emplit nos vies d’une envie d’ailleurs.
Mais il n’y a pas d’ailleurs. Juste la douleur.
Ajouté : Mercredi 31 Octobre 2007 Chroniqueur : Mortne2001 Score :      Lien en relation: Nine Inch Nails Website Hits: 13747
|