Welcome to TiddlyWiki created by Jeremy Ruston, Copyright © 2007 UnaMesa Association
Une pièce noire. La seule lumière est celle d'une lampe posée sur le bureau. Mais elle est si étroite que vous ne distinguez pas les contours du bureau. D'un bois épais, il s'impose à vos yeux. Hors de cette lumière jaunâtre, tout plonge dans l'obscurité. Où sont les murs ? A droite, ni lumière ni ombre qui vous permette de le deviner. A gauche, c'est pareil... Vous êtes assis sur une chaise simple, une de ces chaises du siècle précédent, qui ont peuplé votre scolarité dans les vieux lycées, de leurs montants de métal et de leurs assises et dossiers déformés par des milliers de dos, cabossés par des heures d'ennui.
Vous apercevez vos mains posées sur vos genoux. Vous les soulevez avec difficulté. Vous réalisez que tous vos membres vous pèsent, même immobiles. Vos semelles semblent avoir pris racine; vos jambes écrasent l'assise du siège, comme si votre sang y diffusait du mercure; votre dos est raidi en un tronc sec; vos épaules semblent chargées de plomb. Vous vous sentez pris entre deux espèces d'immobilités qui se concurrencent pour vous attacher ici. Inutile de songer à vous lever. Vous êtes un prolongement du sol. Jamais votre corps ne vous a semblé si étranger. Vous ne sentez pas votre coeur battre. Votre chair ne vous semble pas se réveiller: elle est absente.
Vous regardez la lampe: depuis combien de temps la voyez vous ? Vos yeux fonctionnent-ils, votre cerveau en traite-t-il les informations ? Il semblerait. Depuis combien de temps avez-vous ouvert les yeux ? Rien n'a bougé, rien n'a bruissé. Pas le moindre insecte. Pas le moindre bruit extérieur. Aucun mouvement. Une seule présence: la lampe, seule trace. Quelqu'un l'a bien placée ici ? Qui ? Aucune idée n'éclaire votre cervelle embrumée.
Depuis combien de temps ?
Vous vous souvenez de vous: votre prénom est bien Billy. Ça semble certain. Mais comment avez-vous débarqué ici ? Qui a placé cette chaise, et vous dessus ? Aucun souvenir. Comment vous retrouvez dans cet état physique ? C'est le noir.
Vous restez sur votre chaise. Vous regardez la lampe.
[[002]]
Depuis combien de temps ? Vous en êtes encore à vous poser cette unique question.
Soudain une porte s'ouvre à droite. La lumière qui inonde la pièce vous brûle douloureusement la rétine habituée à la pénombre. Vous détournez la tête. Vous fermez les yeux et vous concentrez pour atténuer l'écho de cette lumière qui vous tambourine dans le cerveau. Des pas traversent la pièce. Une chaise qu'on tire, et dont vos oreilles intensifient le crissement sur le sol. Votre menton repose sur votre poitrine, vos mains montent à votre visage, dans une tentative désespérée de vous protéger; mais cette coquille est trop poreuse.
Une voix: « Vous voilà donc. Pourtant j'ai des doutes sur vous. Je n'ai rien choisi, mes supérieurs vous imposent à moi pour cette mission. Autant que le sachiez tout de suite, je ne crois pas que vous ayez la qualification pour cette mission. Votre passé le prouve assez, pour moi du moins, mais ce n'est pas le cas de tous... »
De quoi vous parle-t-il ? Vous connaît-il ? Il semble que oui. Mais de quoi parle-t-il ? Vos questions ne vont pas plus loin, il vous faut rassembler votre attention sur la douleur lancinante.
« ...Vous trouverez votre ordre de mission avec le paquetage qui vous attend au vestiaire, comme d'habitude. Moi-même, j'en ignore les objectifs précis. Vous n'aurez pas de superviseur référent: la solitude est le meilleur coffre du secret. Je sais cependant qu'elle est d'une importance capitale pour nous – c'est pourquoi je doute de vous, et vous voir dans cet état ne me rassure en rien. »
De quoi vous parle-t-il ? Vous connaît-il ? Il semble que oui. Mais de quoi parle-t-il ?
« Je suis venu vous briefer sur certains aspects de votre mission. Elle comportera des règles spécifiques. »
Vous avez déjà vécu une ou plusieurs aventures de la série ''La nuit, tous les murs sont gris'', rendez vous en [[004]].
Si ce n'est pas le cas, rendez vous en [[003]]
Il faut que vous gardiez une trace des lieux que vous parcourez, des personnages que vous rencontrerez. Rien ne saurait le faire à votre place: ayez confiance en votre mémoire ou prenez des notes, en prenant bien garde toutefois à ne pas les égarer, à ce qu'un hasard malheureux ne les fournisse pas à un de nos adversaires.
Règles du jeu qui n'ont pas encore été définies
Paramètres de personnage: Motivation, Intelligence, Finesse ?
Paramètres : Chance
Place des dés. (proposer un choix où le chiffre est plus élevé que la somme des dés.)
[[005]]
Manifestement, vous vous mentez à vous même. Vous n'aviez donc pas la stature pour la mission, et c'est à raison que la voix vous disqualifiait. Repartez à des tâches plus simples et alors disons nous Adieu ''ou'' vous devenez plus sérieux et alors [[003]]
Le vol dure 7h. Après la collation et le film, vous regardez distraitement la mer de nuages, vous vous demandez quel aspect ont les terres que vous survolez. Vous déposez votre tête sur votre gilet, de façon à garder les yeux sur ces nuages qui ressemblent tant à du coton vus de ce côté du ciel. Vous glissez dans le sommeil.
Vous dormez longtemps. Vous émergez, la tête embrumée. Il vous faut plusieurs minutes pour chasser quelques songes. Vous prenez un livre.
Vous ouvrez le livre que le libraire vous a recommandé: il vous a affirmé qu'il se vendait bien; cela n'était pas un critère de qualité, mais bon, vous vous êtes laissée convaincre. Régulièrement,
vous avez songé que vous ne lisiez pas assez ce que les éditeurs offrent à votre époque moderne pour se divertir.votre jeunesse ennuyante vous a appris à distinguer la littérature de la simple production éditoriale , simple salve annuelle canonnée pour quelques bénéfices à présenter au bilan de la maison d'édition, que des critiques , si béats d'admiration que la bave salit leur chemise, applaudissent en clamant, dans leur solitude qu'ils trouvent superbe, que jamais depuis le temps Bataille, Lautréamont, Dante, Cervantés ou Pétrone la terre n'a engendré un miracle tel, qui enjolive la vie . Admirable. A Pougnailleson, les vacanciers du camping ne cessent , ramenant leurs gosses, de proclamer la beauté du feu d'artifice de cette année, le meilleur jamais vu, en attendant celui de l'année prochaine.
Vous avez lu de la littérature et la production éditoriale pour les ignorants vous emmerde.
Votre snobisme est manifeste, mais que ne ferait-on pas pour ne pas marcher hors du troupeau?
Vous le savez depuis le pensionnat : les soeurs y interdisaient tout loisir afin d'élever l'âme.
Vous regrettez Macha, votre amie d'alors, confidente de tous vos tourments; mais la vie vous a séparées une fois le bac passé et qu'elle est partie étudier la médecine alors que vous aviez choisi de devenir interprête. La vie est cruelle, elle n'épargne personne.
Vous cassez soigneusement le livre avant de le lire. Vous avez hérité ce rituel de votre mère. Mathieu, Votre frère s'est pourtant ri de vous. Vous reproduisez ce geste d'appropriation: vous cassez les pages 50, 100 et 150, victimes propiatoires pour que les dieux accordent une lecture favorable. Vous pensez que la lecture est un voyage: il faut arriver au bout sans encombre ni souci, facilement, sans accroc.
Mais vous n'avez pas le temps de commencer la lecture, le commandant de bord annonce l'atterrissage.Vous attachez votre ceinture.
L'avion a atterri. Il se dirige vers le terminal. A l'arrêt les voyageurs se lèvent, vous restez assise: à quoi bon se serrer dans le couloir ? Vous vous levez à votre tour, prenez votre sac, avancez dans l'allée, répondez à peine au sourire gracieux l'hôtesse - répété des milliers de fois -, avancez à travers le boyau blanc et sortez enfin.
Aéroport: standard, aux normes de sécurité actuelles, impersonnel, sans rien de local, sauf sans doute la langue des employés - mais ils vous parlent en anglais: le seul exotisme qui subsiste est leur accent. Vous suivez les passagers ou les panneaux, sans faire la course en tête, tranquillement, à votre rythme. Vous récupérez votre valise, passez la douane. Comme à chaque fois le douanier détaille votre visage, puis votre photo, puis votre visage: mal à l'aise, vous imaginez toujours qu'il vous reconnaît mal. C'est vrai que vous avez vieilli, que vos traits se sont marqués depuis trois ou quatre ans. Mais pour 36 ans, vous êtes encore pas mal. Vous vous dirigez vers la sortie. Au dessus des têtes, au milieu des gens qui attendent, vous apercevez une pancarte avec votre nom.
Vous vous dirigez vers la main qui tient cette pancarte levée , allez en [[018]]
Vous passez à travers la foule, les yeux baissés; une panique vous a saisi, la peur d'affronter le jugement de... sur vos ..., qui ne vous quitte pas malgré tout, remontez au début du paragraphe.[[005]]
A la seconde descente du § abandonnez ce livre, il ne vaut pas la peine
Propositions de roman d'espionnage. Après tout, n'est-ce pas Vous le héros du livre ? Vous qui décidez des directions à prendre ?
Celle que vous venez de choisir est la plus belle de toute: elle est à inventer.
Vous dressez la liste de vos personnages. N'hésitez pas à noircir le méchant (voyou, escroc, fasciste, ...)
A vous d'imaginer des aventures pleines de tensions et de suspens, de missions et de secrets, d'épreuves en tout genre dont vous saurez bien triompher - je vous fais confiance. Vous avez choisi la meilleure aventure, celle qu'il faut écrire. Bon voyage et bonne chance.
Vous ouvrez l'enveloppe de craft sans la déchirer, avec prudence. Vous ne voulez pas laisser d'indice de votre lecture. Des scrupules se manifestent: ce message caché ne vous est après tout pas destiné. Vous voilà sur le point de dérober des mots qui ne vous sont pas destinés. Êtes-vous assez voyeur pour continuer ?
Oui [[125]]
Non [[168]]
Avez-vous fait bon voyage ? Interroge une voix chaleureuse.
Vous hochez la tête, en essayant de présenter un visage souriant malgré la fatigue du voyage.
- Veuillez me suivre. Vous lui emboîtez le pas à travers de longs couloirs. Vous ne parlez pas, lui non plus. Plafond bleu, murs gris, éclairage néon.
- Depuis qu'ils ont construit le nouveau parking, ils tiennent à le rentabiliser. Alors ils font patrouiller des agents pour coller des manches tout autour de l'aéroport. Comme votre avion a eu du retard, j'ai été obligé de m'y garer.
Grand et blond, frisé; costume près du corps et bottines anglaises. Il en impose. Il veut en imposer. Vous remarquez pourtant ses mains épaisses, larges, des mains mal dégrossies de paysan arrivé à la ville. Vous devinez des origines dont il a honte, vous supposez des humiliations subies ou ressenties lors des premières années de citadin.
Le trajet en voiture vers la ville, sans surprises: autoroutes urbaines, zones pavillonnaires qui alternent avec des cités, zones indus et zones commerciales.
La conversation de votre chauffeur est fastidieuse, il enfile remarques parsemées de jurons, banalités sur vous , votre métier et votre ville d'origine et réflexions générales sur le Politique avec l'art consommé d'un joaillier en lieux communs. Ses enchaînements sont laborieux: il souffle un « eh oui » avant de se lancer dans une série de « euh » ou de « j'avais quoi à l'idée? ».
Vous prenez pitié et décidez de ne plus émettre de réponses laconiques, mais de participer activement à la conversation, allez en [[247]]
Vous décidez de le laisser à son malaise: vous ne craignez aucun silence. Vous vous taisez jusqu'à l'arrivée , allez en [[229]]
« Et bien voilà, j'ai trouvé un message sous le tiroir de la table de chevet. »
Sans se départir de son sourire,il bascule un peu la tête vers la gauche et hausse un sourcil, que vous interprétez comme interrogateur. Vous lui tournez le dos et allez chercher le papier qui traîne sur votre lit. Vous revenez et lui tendez le papier. Il le saisit, mais ne le lit pas. Il vous regarde.
"Qu'est-ce qui vous laisse penser que c'est un message plutôt qu'un texte ?," vous lance-t-il.
Cette remarque vous stupéfait. N'a-t-il pas raison ?
Est-ce par narcissicisme que vous avez cru que ce texte était pour vous ? [[063]]
Est-ce parce que le texte, dans sa langue charabiesque, vous semblait codé et porteur d'un message secret ? [[163]]
Est-ce parce que, à force de lire des livres, vous croyez que tout doit faire sens dans une aventure ? [[263]]
Il lit le texte
"Le texte s'adresse clairement à « tu » mais est-ce vous ? Tu vaut-il vous ? En français, oui... Mais si on vous traduit, resteriez vous ? si un traducteur italien s'empare de vous, d'un coup de baguette, vous deviendrez elle, l'allemand vous multipliera en eux, l'anglais vous réduira à tu: à chaque langue son magicien. Sans vouloir vous anéantir, « vous » n'est que le produit d'une langue. Pardon,vous n'êtes que le produit d'une langue.
-...
- Quoiqu'il soit plus précis de dire que vous n'êtes que le produit d'une parole.
-...
- Mais bon, on ne va pas pinailler, hein ?"
Il se moque de moi, pensez-vous.
"Et puisque il manque « je », c'est compliqué d'en deviner l'intention. Ce texte vous est-il adressé ? Si ce n'est pas le cas, pourquoi traîne-t-il ici ? S'il est caché, pourquoi l'est-il si mal ? A peine commenciez vous à vous installer dans la chambre que vous l'avez trouvé ? est-ce un hasard ?
S'il vous est adressé, par qui l'est-il ? Qui savait que cette chambre vous était destinée ? Qui vous attendait ? Qui a (avait) quelque chose à dire ? A quel sujet ? Qui s'estime assez proche de vous pour vous tutoyer ? Moi, par exemple, qui vous connaît bien - ça fait déjà dix bonnes minutes que nous nous parlons - je ne me le permettrais pas..."
Vous décidez de le remercier pour ces questions éclairantes, et vous retournez dans votre chambre. [[105]]
Vous arrivez au rdc. Vous découvrez un grand hall, dans lequel la lumière d'un soleil de septembre entre largement. Pavé de ce marbre rose qu'on voit tant dans les séries qu'il a acquis une connotation d'arrivisme cheap, ce large espace se partage en plusieurs petits salons, dans celui de droite deux hommes discutent à côté d'un troisième qui mâche son sandwich à grande vitesse. A droite, d'autres personnes lisent des magazines
Vous dirigez droit vers l'accueil , après avoir passé votre main empressée sur vos vêtements pour vérifier leur présentabilité, allez en [[264]]
Vous n'êtes attendue qu'à trois heures, prenez du bon temps, allez en ............................
la porte n'a pas de poignée de ce côté: quelle erreur de ne pas l'avoir remarqué avant...
vous retournez affronter votre minotaure au bout de ce labyrinthe
Vous tapez du poing contre la porte dans l'espoir qu'un passant bienvenu vous ouvre: lancez le dé.
1 allez en ...................
2 à 6 allez en recommencez A l'ouverture ,c'est la mort au lieu de la libération attendue ................
Vous réveillez avec une sensation d'apaisement. Cette nuit vous a fait grand bien. Vous vous étirez sous les draps. Vous décidez de commander votre petit-déjeuner. Vous vous asseyez sur votre lit.
[[236]]
Quoi que vous pensiez, ça ne change rien [[033]]
roman réaliste... pour ceux qui aime que ça ressemble à leur quotidien. Pas pour moi (et donc pas pour vous).
- alors t'as vu, demande le Ken impatient de votre réaction, c'est étonnant non?
- Hélas, non il m'était caché par vous.
- Quoi, tu aurais dû te pencher.
Il se tait marque une hésitation. Vous l'observez par dessous. Il semble vouloir parler tout de même, puis non. [[154]]
En fait des questions ne cessent de vous tournebouler la tête depuis votre arrivée. Tout n'est que questions.
- Excusez-moi, mais j'ai une demande particulière à formuler, osez-vous lancer.
- Aucun problème, il est là pour ça.
Un schizophrène, il ne peut être que ça... Et il se tient en face de vous. Avec son sourire qui devient bien inquiétant. Avec ses expressions obscures. Mais d'une certaine manière vous avez besoin de lui. Il serait donc maladroit de contrarier sa facétie.
- Vous semblez tout connaître ici et disposé à tout faire pour me complaire...
- Vous complaire plutôt.
- Oui, si on veut. Puis-je me permettre de vous poser une question ?
- Vous vous le permettez déjà en me posant une question, alors vous pouvez continuer de vous permettre. Tout pour le service du client. J'ai la réponse, parce qu'on dit que toutes les questions se ramènent à une seule.
Quelle est votre question ?
> - Je ne sais pas bien ce que je fais ici. Le savez vous ?
> - J'ai trouvé un message sous ma table de nuit. Savez-vous ce qu'il fait ici ? [[032]]
> - La télé ne marche pas. Pourriez-vous arranger ça ?
Votre tête s'écrase la première, le coque crânienne s'ouvre, dans un bruit de noix, et laisse jaillir la cervelle. Puis votre corps se désarticule. Un bras s'arrache de l'épaule. Les pierres sur les cinq mètres alentour se tapissent de tissus musculaires, d'os brisés: votre corps vient d'éclater comme une bombe à fragmentation.
Une pluie dense se charge de refroidir ce qui palpite encore, et le sang fait place à la boue.
Ce n'était pas un roman onirique...
votre description par le médecin légiste de la morgue.
Le sujet mesure 165cm , est de sexe féminin. Agée d'une trentaine d'années.
L'utérus n'a pas porté d'enfants, le corps ne comporte aucune blessure qui aurait pu entrainé l'âme hors.
Quelques cicatrices: une au genou sous la rotule gauche ( 2PAR 3 cm)
mâchoires
Traumatismes peri-mortem : cet individu a reçu un projectile d'arme à feu à travers le côté droit de la figure, à travers la joue, avec sortie par l'arrière du cou. Un impact sur la partie inférieure du diaphyse du radius suggère également que l'individu pourrait avoir levé son bras droit pour protéger son visage. Il n'est pas possible de savoir si le même projectile a touché son avant bras en premier et sa tête ensuite. Par contre, le fait que le dommage au crâne soit minime en comparaison avec celui constaté sur d'autres individus, rend plausible cette hypothèse. Aucune munition n'a été récupérée sur les lieux.
Sexe : masculin.
Age : âge estimé : 28 ans (+ 5 ans)
Forme de mise à mort :homicide.
Traumatismes peri-mortem : cet individu a reçu deux projectiles d'arme à feu à la tête : un dans la région du pariétal gauche par l'enveloppe métallique (full metal jacket) d'un projectile de haute vélocité, de calibre 5.56 mm (probablement en provenance d'un fusil automatique M-16). Le deuxième projectile fut tiré à travers la joue gauche pour sortir du côté droit de la mâchoire inférieure. Dans ce dernier cas, il n'a pas été possible de déterminer le type de munition utilisée. L'individu a également été atteint au moins deux fois au tronc par des projectiles d'arme à feu. La chemise que portait l'individu montre des perforations au milieu du dos qui laissent supposer que les projectiles auraient pu être tirés dans le dos. Un des projectiles est de calibre 30 (probablement en provenance d'un fusil M-1). L'autre projectile tiré du dos vers le devant aurait touché le bassin droit.
L'individu possédait un dentier provisoire comprenant : les incisives supérieures centrales et latérales, la première prémolaire supérieure droite ainsi que la première molaire supérieure gauche. Les incisives latérales sont bordées d'un filament en or de chaque côté de la couronne (mesial et distal). L'individu avait peut-être également des filaments similaires dans ses incisives permanentes. La première molaire supérieure gauche semble avoir été ajoutée au dentier plus tard parce que le matériel a l'air d'être plus récent et d'avoir été poli pour le rendre plus lisse. De plus, cette partie du dentier en contact avec la cavité laissée par le M1 est convexe plutôt que concave, comme elle se présente normalement. Ceci peut être expliqué par le fait que la cavité de la première molaire supérieure gauche n'était pas complètement remodelée et quelques tissus osseux réactifs s'y trouvaient encore au moment où le dentier a été modifié. Si l'on considère l'hypothèse que le remodelage complet de l'os alvéolaire avait eu lieu entre 4 et 6 mois avant l'assassinat, on peut supposer que le dentier avait été agrandi au moment de l'extraction ou la perte de la dent.
Ainsi, en considérant la quantité de remodelage toujours présente dans la cavité du M1, on peut déduire que le décès de cet individu n'aurait pas eu lieu plus de six mois après l'extraction ou la perte de la dent. Le travail réalisé sur les dents de ce sujet pourrait servir d'indice à son identification. Il s'agit d'un travail spécialisé, effectué par un dentiste ou un laboratoire prosthétique. Le fait que le dentier a été remodelé implique que des visites répétées ont eu lieu au laboratoire et le dossier relatif à ces travaux pourrait encore exister au bureau du spécialiste.
Labyrinthe
à placer au détour d'une porte
Vous poussez la porte. Vous vous tenez dans un couloir, aux murs gris et lisses- si lisses que vous tendez la main pour toucher celui de gauche :le béton est lissé, quelle maîtrise de l'artisan qui l'a monté, comment a-t-il réussi à le tendre à la verticale ?
vous avancez dans perspective du couloir à la froideur sensuelle des portiques chiricquiens.
Au bout d'une quinzaine de mètres , le couloir tourne à droite à 180: vous suivez la parallèle, sur quinze mètres encore, avant de tourner à nouveau de 180, mais cette fois sur la gauche.
Un inquiétude sourd
Vous la surmontez et décidez d'aller plus avant [[165]]
Vous vous demandez pourquoi vous avez avancé; vous ne voyez pas où ce couloir peut mener. [[054]]
Vous essayez de vous reposer pour atténuer le jetlag. Le sommeil vous fuit: trop de décalage, horaire surtout; et une pointe d'anxiété. Depuis le lit, vous apercevez le ciel à la teinte métallique
Mais voilà que le téléphone se met à sonner.
Répondre et ne pas savoir à quoi s'attendre [[212]].
Ne pas répondre et dormir, fuir ces inquiétudes [[057]]
Vous vous retournez pour à nouveau chercher le sommeil. En vain.
A chaque instant des multi-univers coexistent et le meilleur au terme d'un calcul s'impose. Pourtant il existe entre ces multi-univers des passages que seuls peuvent emprunter les nautes. Pour cela ils s'appuient sur des évènements qui existent identiquement dans chacun des multi-univers, indépendamment des circonstances, hors de toute causalité. Ces événements omni-présents leur servent de portes , de tunnels transversaux. Seuls les nautes en franchissent les seuils, mais ils ont la capacité d'y propulser ce qu'ils veulent: des gens, des choses, des faits (les faits sont indépendants des gens et des choses). La manière et la visée de l'utilisation de ces vases communicants entre les multi-univers reste obscure. Les nautes ont appris cela durant leurs années de séminaire. Personne ne sait s'ils travaillent d'accord, ou si chacun d'entre eux manipule en toute liberté.
Vous voilà sur votre lit. Le sommeil vous fuit. Vous ne réussissez pas à vous détendre. Votre lourde fatigue ne contrebalance pas cette enveloppe de craft, qui vous pèse sur l'esprit, sans qu'il soit possible de l'en déplacer. "Que contient-elle ?", cette question s'inscrit en lettres de plomb derrière vos paupières...
L'ouvrir ou ne pas l'ouvrir ? Cette enveloppe fait-elle partie de votre multi-univers ? un naute l'envoie-t-il à vous, voire vous à elle ? Quelle que soit la réponse, êtes-vous encore libre de vous endormir en la laissant scotchée sous ce tiroir ?
C'est la double expérience de la @@color(#ff0000):Prédestination@@ et de la @@color(#ff0000):Fatalité@@.
Prenez votre temps pour l'admettre; puis visitez le [[125]]
<html><div style="text-align: center;"><big><big><span style="font-weight: bold;">Maou, maou, maou</span></big></big><br style="font-weight: bold;"><big><big><span style="font-weight: bold;">La boune femme a fait maou</span></big></big><br style="font-weight: bold;"><big><big><span style="font-weight: bold;">t'as qu'à m'siv</span></big></big><br style="font-weight: bold;"><big><big><span style="font-weight: bold;">tu s'ras</span></big></big><br></div></html>
Commentaire: [[267]]
Vous descendez le long d'un jardin, sur un chemin de gravier. A votre gauche s'étendent des pelouses très entretenues, où se dressent épars des platanes et des ormes. Vous tournez la tête à droite, et votre regarde plonge sur un golfe, aussi étroit qu'un fjörd. Vous descendez encore; un compagnon vous apprend que vous êtes dans les jardins de l'Archevêque, qu'il possède le jardin dans son entier, c'est-à-dire la province de Toulouse. Vous avancez et le jardin devient une péninsule. Au bout de la péninsule, vous apercevez un kiosque, blanc de marbre, au toit doré. Vous y montez et vous tournez votre corps à droite. Devant vous s'étend bien un bras de mer. De gigantesques ballons argentés naissent de l'eau, s'élèvent à une certaine hauteur mais pas plus; chacun trouve sa hauteur et s'y stabilise, comme emprisonné entre deux densités; chacun lesté d'un fil d'argent. Puis ils glissent vers la sortie du golfe.
Le golfe est dans une grande longueur fermé par une digue de galet, pas plus haute que les barrages imaginaires que vous empiliez dans la rivière. Au delà; l'océan s'agite en vagues démesurées. Votre navire ne passera jamais! Une peur vous saisit. Le capitaine hurle ses ordres à tous les marins assemblés sur le pont; ils ne semblent pas plus rassurés que vous, chacun propose sa solution. Il est suggéré de plier le navire. Miracle de la parole, « et cela fut »: le bois se tord, la proue se courbe à venir toucher la poupe, aussi facilement qu'un vaisseau de papier à deux dimensions. Le navire devient une yole, ou un parapluie renversé. Au troisième souffle de vent, vous voilà emporté dans les airs au dessus des flots...Sous votre embarcation, c'est un monde de fourmis qui s'étend. Vous êtes si haut que l'horizon se courbe devant vous. Vous voilà emportés de courant d'air en courant d'air. Mais Zéphyr se lève, réveille Borée et sans prendre temps de s'étirer, lance le jeu: les deux vents se renvoient votre parapluie. Le navire s'agite et tangue. Après un premier jeu calme, les accélérations succèdent aux lifts. Tous les hommes d'équipage se groupent en grappe autour du mât, s'y agrippent, sentant le danger. Le navire virevolte, et certains de vos compagnons décrochent et chutent vers le bas. Vous craignez le même destin, et vos mains serrent plus fort le mât. Un smash et le navire chavire.
Vous flottez, votre chute est rapide mais longue; certains marins vous passent devant, pressés d'arriver sur la terre; d'autres encore remontent, à grande brasse. Un Retard, à large collerette vous dépasse. « En lapin! je suis en lapin! Que va dire la Duchesse ? », s'exclame-t-il. Il disparaît.
Après un espace temps indéfini, le sol s'approche, à la vitesse d'un travelling.
Un bord de mer. Une montagne. Un champs. Un mur. Une pierre.
Et...[[081]]
La voiture quitte l'avenue pour gagner le parking par derrière: vous entrez par l'entrée réservée aux employés, dont vous allez faire partie. Ken, puisque votre chauffeur s'est présenté sous ce mauvais nom, met le clignotant et tourne à gauche;
« Tu vas voir le portier; son taf, ce n'est que lever la barrière; ça pourrait être fait automatiquement, mais non; il est un vestige du passé: l'immeuble s'est construit autour de lui, sans doute, c'est le plus vieil employé de tous. Personne ne sait depuis quand il est ici. Tout le monde l'appelle Bébert, mais personne n'est sûr de ce nom. En fait, personne ne sait quoi que ce soit de certain sur lui. A plusieurs, on a même fait un pari; celui qui trouve qui trouve une info certaine sur lui, on lui paye une caisse de champagne. Tu sais quoi? On sait toujours pas... Pourtant ça devrait pas être compliqué, mais... Alfred - tu verras comme c'est une pipelette - n'a pas réussi à en tirer un son autre qu'un grognement et Rico de la comptabilité n'a pas pu retrouver son contrat d'embauche de l'époque. Moi, j'essaie de me le mettre dans la poche, par des petits cadeaux. Je suis sûr qu'à force ça paiera. »
Il devient songeur, sur ces chances de succés probablement.
« Tout le monde l'a toujours vu dans sa cabine. Il est devenu un personnage de légende... »
Vous êtes devant la cabine. Ken ouvre la vitre. Le portier vous est caché : son perchoir est trop haut.
Vous essayez de jeter un coup d'oeil, par simple curiosité, allez en [[170]]
Ken est vraiment con et sa conversation inintéressante, vous marquez votre désintêret d'un regard blasé ostensiblement tendu vers l'avant allez en [[072]]
Vous saisissez le bouton du tiroir que vous tirez trop violemment. Dans sa chute, il vous aurait écrasé les pieds, si vous n'aviez eu ce geste de recul élégant du matador qui ramène le bassin, à ceci près que votre taureau est un tiroir de formica.
Vous vous hâtez de le ramasser et essayez de le remettre sur ses rails. En y déposant les roulettes, votre main se graisse: comment a-ton pu graisser autant les roulettes? Il n'en est nul besoin, pourtant... Alors que vous vous démenez et commencez à donner des coups pour forcer le passage du tiroir, votre main touche du papier scotché sous le tiroir. Vous le retournez et constatez qu'effectivement un papier y est soigneusement plié.
Vous remettez le tiroir en place,avant d'y déposer vos clefs: allez en [[168]]
Vous arrachez le papier du scotch qui le retient et vous lisez. Allez en [[017]]
Il traverse le parking, stoppe la voiture devant une porte, grise.
- voilà vous êtes arrivés. Bonne chance, quand même...
- merci ; à une prochaine, peut-être
- peut-être... je dois me dépêcher et aller chercher quelqu'un d'autre. L'accueil est évidement au rez-de-chaussée.
Vous entrez dans l'ascenseur, qui a ouvert ses portes dés que vous avez appuyé. Il vous vient à l'idée qu'il vous attendait, empreint de cette connivence bienveillante que dégage des objets devenus signes. D'un regard sur le tableau, vous remarquez que l'immeuble comporte 33 étages, chiffre trop irrégulier pour être fortuit: encore un architecte qui a joué au cabbaliste...
Vous appuyez sur le 0, allez en [[048]]
Vous êtes maladroite, ou inattentive, à votre goût, allez en [[226]]
Quoi que vous pensiez, ça ne change rien [[033]]
Pas de bifurcation possible, vous vous enfoncez dans un couloir ,sinueux serpent qui se plie en virages réguliers: à droite, à gauche, à droite, à gauche,à droite, à gauche,à droite, à gauche,...comme le serpent à plumes accroché au linteau de pyramides aztèques. Vous êtes en Ouroboros, pas de sortie, il se mordra la queue. Des clochetons carillonnent. Vous avancez.
IL vous semble pourtant queue ce couloir s'enroule autour d'un centre qui lui justifie sa forme.
Vous revient en mémoire le tracé de ces labyrinthes mystiques qui élèvent l'âme des pèlerins dans ces cathédrales françaises. La forme d'un lotus. Mais le souvenir vous fait défaut: si vous aviez internet , votre habituel substitut de mémoire et de savoir, vous le reconnaîtriez, vous liriez sa date de traçage, à laquelle vous ôteriez ..., que vous diviseriez par .... à quoi vous ajouteriez... et vous vous hâteriez vers la sortie. Mais vous n'avez pas cette possibilité, à moins d'une aide extérieure au récit.
Vous déposez vos clés, qui ne vous serviront à rien. Elles ne sont plus que le reste de ce que vous avez laissé derrière vous: votre maison et vos meubles, votre vie et vos habitudes, votre passé.
Vous vous laissez tomber sur le lit, pour un repos de quelques instants. Vous fermez les yeux, calez votre tête entre les deux coussins, calmez votre respiration, et videz votre esprit. Comme on vous l'a enseigné vous voyez la chambre, moins le placard, moins la fenêtre, moins le papier peint, moins les murs. Il ne reste plus qu'à éloigner le lit sur lequel vous vous reposez. Il diminue. Le blanc s'approche. Mais surgit la table de chevet. Vous vous concentrez. Elle disparaît... quelques instants. Impossible, elle reste. Vous vous efforcez de la démonter. En reste le coeur, son contenu. L'enveloppe de craft.
Elle vous tourne dans la tête. Elle vous préoccupe. Vous vous expliquez mal sa présence. Qui a bien pu la mettre là ? Un précédent occupant de la chambre ? Mais pourquoi alors n'a-t-elle pas été nettoyé par le service d'étage ? Elle est tombée sous vos yeux tout au plus deux minutes après votre entrée dans la chambre. Comment le service d'étage a pu passer à côté ? le rangement de la chambre, de l'alignement rigoureusement parallèle des dépliants à l'absence de poussière, indique un soin méticuleux. A moins que ce ne soit quelqu'un du service d'étage qui ne l'ait placé ici... A supposer que ce soit ça, pourquoi cette enveloppe vous serait-elle destinée ? Qui a pu savoir que vous seriez logé ici ? Vous savez que vous n'êtes pas ici «par hasard», mais qui ici est sensé le savoir ? Ces questions vous tarabustent. Vous soupirez: la fatigue du voyage ne vous rend-elle pas légèrement paranoïaque ? Vous souriez de vous-même.
Vous décidez d'y jeter un oeil: [[125]]
Vous savez que vous êtes fatigué et que vous vous faîtes des idées: [[111]]
Il a l'oeil rouge, la barbe noire et grasse, un ventre large et des mains armées d'ongles. En vous apercevant, Bébert ouvre une gueule qui pourrait être triple et se met à trépigner d'un corps avide.
- Salut Bébert ! jette Ken, d'un ton confiant, le coude posé sur la fenêtre. Sale temps pour la saison, hein.
Bébert garde un regard farouche, sur la défensive,comme prêt à mordre.
Ken continue de son insupportable ton de franche camaraderie: « T'as de la chance d'être dans ta cabine toi, t'as pas à te geler... L'inconvénient, c'est que t'es tout seul ici. Tu verrais la stagiaire qui est arrivée à l'accueil. Une vraie.. »
Bébert ne semble pas baisser la garde et ne se décrispe pas. Ken continue la conversation qu'il croit séduisante.
« ... Ah, d'ailleurs, j'ai pour toi une boîte de paté de caille... » Haussement de sourcils. « Ben ouais, c'est un client qui me l'a laissé, mais je n'y tiens pas. Et comme je sais que tu aimes, je te la donne. »
Il saisit la boîte qu'il avait préparée dans le vide-poche et la lui jette. L'autre s'en saisit facilement, examine la boîte, et relève des yeux apaisés.
« De rien, c'est un petit truc. Allez, à une prochaine... »
La voiture s'enfonce dans le parking. [[154]]
Resaisissez-vous, voyons ! Même pour vous détendre, rien ne justifie que vous allumiez la boîte à images magique. On devient tellement passif devant ! le cerveau se met en veille prolongée. Certes vous y oubliez vos fatigues, vos soucis; mais en même temps n'oubliez-vous pas le monde et vous même ?
D'un certain point de vue, c'est criminel à l'égard de votre créateur, vous a doté d'intelligence. Si vous craignez un tant soit peu le Jugement Dernier, [[reprenez vous|236]].
Sinon relisez cet [[avis de P.K.Dick|183]]
//[...]But __''another way''__ to control the minds of people is to control their perceptions. If you can get them to see the world as you do, they will think as you do. Comprehension follows perception. How do you get them to see the reality you see? After all, it is only one reality out of many. Images are a basic constituent: pictures. This is why the power of TV to influence young minds is so staggeringly vast. Words and pictures are synchronized. The possibility of total control of the viewer exists, especially the young viewer. TV viewing is a kind of sleep- learning. An EEG of a person watching TV shows that after about half an hour the brain decides that nothing is happening, and it goes into a hypnoidal twilight state, emitting alpha waves. This is because there is such little eye motion. In addition, much of the information is graphic and therefore passes into the right hemisphere of the brain, rather than being processed by the left, where the conscious personality is located. Recent experiments indicate that much of what we see on the TV screen is received on a subliminal basis. We only imagine that we consciously see what is there. The bulk of the messages elude our attention; literally, ''after a few hours of TV watching, we do not know what we have seen''. Our memories are spurious, like our memories of dreams; the blanks are filled in retrospectively. And falsified. We have participated unknowingly in the creation of a spurious reality, and then we have obligingly fed it to ourselves. We have colluded in our own doom.//
__Comment__:
Can you imagine what's the __''first way''__ to control minds ? Solution is in this pages. Find it out, you'll be surprised... If you can't, let me know by mail, so you can be taught.
Only way back: [[236]]
On frappe. Vous ouvrez la porte.
« Bonjour, veuillez excuser pour le dérangement. »
Sur le palier se tient un homme plus petit que vous. Les cheveux bruns et courts, il affiche un sourire commercial qui vous semble trop large. Mais les montures vertes de ses lunettes relèvent son aspect lisse d'une pointe d'originalité, qui dénote pour un chargé de clientèle.
« Pourriez accorder quelques secondes de votre temps ?
- Je n'y vois pas d'inconvénient, vous entendez-vous répondre.
- Merci, une visite s'imposait. A cet étage, Mathieu Cartailler est incontournable, il peut vous fournir tout ce dont vous aurez besoin. N'hésitez pas à faire appel à lui. Tous vos souhaits seront exaucés. Ici ni room service, ni congierce. Il fait office des deux. Vous n'avez qu'à appeler. Que vous vouliez prendre vos repas dans votre chambre, que vous vouliez mettre vos affaires au pressing. Il s'occupera de tout pour votre confort. Il sera votre seul interlocuteur. Si vous avez des objets précieux que vous voulez mettre en sureté, aucune hésitation. Une compétence reconnue depuis plusieurs années que nous envie tous nos concurrents. Qui fera le confort de votre séjour. Vous n'aurez plus aucun souci, si ce n'est de profiter pleinement de votre séjour ici...
- Bien. Et où puis-je le trouver ?
- Il est devant vous.
Vous ne pouvez vous empêcher d'ouvrir de grand yeux. Étonnement puis soupçon vous traversent: n'auriez-vous pas devant vous le plus grand schizophrène que vous n'ayez jamais rencontré ? Voilà que maintenant la rigidité de sa tenue vous saute aux yeux: il se tient immobile, d'une manière géométrique, vous regarde, semble attendre une parole de vous qui l'animerait comme le mouvement de bras du marionnettiste anime le pantin.
- Je vous remercie...
- Vous le remerciez,je lui dirai, reprend-il vivement.
- C'est bien aimable à lui.
- Oui, n'est-ce pas ?
Ce Mathieu Cartailler vous sourit, d'un sourire si large que ses lèvres semblent déborder les oreilles. Un sourire artificiel déposé pour contraster avec des yeux mélancoliques. Il attend que vous parliez.
- Bon, je vais devoir...
- Eh oui, vous coupe-t-il de son grand sourire.
Il attend. Il vous regarde.
Vous n'osez plus le regarder: maintenant son image se confond avec celle du chat de Chester. Cela vous fait sourire, vous êtes loin de vous prendre pour Alice.
Finalement si vous avez devant vous un chat de Chester, peut-être pourra-t-il répondre à certaines questions que vous vous posez.
Vous avez des questions à lui poser: [[074]]
Ou non, et c'est bien dommage...
arrivée au premier sous sol ;
* mauvaise rencontre? agression ? Personnage intrigant?
* Bonne rencontre?
! A vous de décider...
Il doit être dans les onze heures du matin. Caché par d'épais nuages, le soleil ne réussit pas à éclairer la ville autrement que d'une lumière terne. Votre voiture quitte le périphérique et avance vers le centre de la vill. Les gens ont la couleur des murs, leur allure de piéton semble calqué sur un rythme automobile: inhumain.
Non, cette ville ne vous plaît guère.
"Nous voici arrivés", déclare votre chauffeur.
Vous contournez un bâtiment, vous vous enfoncez dans un parking, une barrière se lève, vous avancez dans les allées de voitures. Votre chauffeur s'arrête.
"Vous voici arrivés", vous informe-t-il. "Prenez cette porte, puis l'ascenseur. Au premier étage, vous trouverez l'accueil de la société. Présentez-vous, on vous orientera. Je vous laisse ici, j'ai une autre course à faire. Passez une bonne journée..."
Il descend vous ouvrir le coffre. Vous récupérez vos valises et vous dirigez vers la porte.
Lancez un dé. Ôtez de le chiffre de votre total de Motivation.
Vous appuyez sur le 0, allez en [[048]]
Vous êtes maladroite, ou inattentive, à votre goût, allez en [[226]]
Située au treizième étage vous séjournerez dans une chambre spacieuse (65m2) aux beaux volumes et de couleur miel clair. Le parquet posé en point de Hongrie craque encore un peu sous vos pieds !! Vous trouverez votre sommeil dans un lit confortable de 180x200cm, sous une tête de lit habillé de toile de Jouy assortie aux tentures des deux grandes fenêtres.
Un espace sépare la chambre de la salle de bains, là se cache un point d'eau taillé dans la pierre. Si l'envie vous prend, vous pouvez laisser couler l'eau et vous préparer un thé afin de vous réveiller en douceur Dans une salle de bains aux tomettes provençales, vous trouverez deux grands lavabos, une baignoire sur pied en fonte, ainsi qu'une douche (110x90) munie d'une grande pomme et des toilettes séparées. Dans cette ambiance romantique le bonheur est assuré.
Caractéristiques :
Climatisation, Chauffage, Master Bed 190, Lits Séparables, Lit 1 Personne, Possibilité lit Sup, Possibilité lit Bébé, Salle de Bain, Toilette, Coffre Fort, Peignoirs de Bain, Linge de toilette, Rangement, Couverture GSM, Accès Internet par WIFI.
Vous défaites vos bagages, roman réaliste [[065]]
Vous allez à la salle de bains directement, roman porno trash [[XXX]]
Vous déposez vos papiers et votre argent dans le coffre roman de l'espion amnésique [[007]]
Vous testez la literie roman onirique [[137]]
Vous cherchez les micros et les souris, journal d'un fou [[301]]
Vos allumez votre portable, afin de synchroniser, livre de programmation [[302]]
Vous reprenez le livre que vous n'avez pas eu le temps de commencer: [[ouvrez-le!|001]]
Vous allumez la télévision: [[171]]
Vous ouvrez le tiroir de la table de chevet pour déposer vos clefs [[148]]
Je vous conseillerais plutôt la salle de bain, cela détendra vos muscles cassés par le voyage . Refaites vous une beauté. A moins que le tiroir ne vous semble plus attirant. Qui sait ?
- Il fait vraiment froid (rien ne vaut une bonne conversation météorologique pour combler le vide et mettre n'importe qui à l'aise). Je ne m'y attendais pas et je crois que ma valise ne contient que des vêtements trop légers...
- C'est vrai, ça fait des années qu'il n'a pas fait aussi froid. Chez mes parents, c'est descendu à moins 15°. Les canalisations à la cave ont sauté... heureusement qu'ils s'entendent bien avec les voisins, les Fernandez... ils se sont douchés et ravitaillés chez eux pendant toute la semaine... et puis le weekend dernier, je suis descendu aider mon père à poser de nouveaux tuyaux...
- Ça n'a pas dû être facile pour eux... quel âge ont-ils ?
- La soixantaine: il m'ont eu tard...et maintenant, ils se font vieux. Ils ont une petite exploitation agricole en Normandie, près de Yvetot. Vous connaissez la Normandie ?
- Non, à mon grand regret. J'en ai vu des images dans un cours de civilisation, quand j'étudiais le français à l'université. En fait, c'est la première fois que je viens en France.
...
"On est presque arrivé" : [[139]]
Quoi que vous pensiez, ça ne change rien [[033]]
Vous vous approchez de la réception. Plusieurs employés s'agitent derrière, mais aucun ne s'empresse vers vous; seriez-vous transparente ? Vous cherchez à attirer leur attention, en levant discrètement la main et en l'accompagnant d'un 's'il vous plait". Mais vous n'aimez pas demander. Demander un chemin, demander un service, demander un renseignement. Toujours demander, et se soumettre au bon vouloir des autres...
Vous n'osez pas les héler, vous avez peur de "géner", comme toujours vous ne vous sentez pas à votre place, vous avez peur de déranger. Votre entourage nomme cette attitude que vous prenez "timidité" et y adjoint l'évident adjectif "maladive". Pourtant vous savez qu'il ne s'agit pas de ça, mais d'un sentiment d'inexistence, d'étrangeté et de solitude. Vous patientez.
"Bonjour, que puis-je pour vous ?" Vous voici surpris dans votre rêverie. Au moment où vous n'attendiez plus. Vous donnez votre nom. "Effectivement, il y bien une chambre à votre nom, réservée par Oscom. Avez-vous des bagages ?... Nous allons les faire monter." Il vous tend les clés de la chambre [[236]]
Ce texte vous plonge dans une certaine perplexité. IL est on ne peut plus sybilin. Comment comprendre la présence du dit texte, ici, et écrit dans un langue si vernaculaire ?
Vraiment, votre curiosité n'est pas récompensée...
Essayons tout de même.
Quatre vers de longueurs inégales, sans rimes. Une boune – bonne ? - femme qui fait « maou ». Les chats font « maou »; un chat est un chat; seuls les chats font maou; une boune femme qui fait maou n'est pas un chat. Ce mot est répété quatre fois. Pour insister sur le miaulement ou pour faire apparaître le chiffre 4, hautement symbolique dans l'antiquité égyptienne ?
Pendant que toutes ces questions obscurcissent l'horizon de vos pensées, on frappe à la porte. Vous allez ouvrir: [[190]]
Vous n'ouvrez pas, vous faîtes semblant de dormir déjà, ce que vous auriez dû faire, au lieu de perdre votre temps à ouvrir l'enveloppe. Vous allez d'ailleurs vous coucher tout de suite. [[105]]
ça y est, tu es prête. Il ferme la porte et avance dans la chambre. « je viens te chercher et te conduire où on t'attend. »
Un coup d'oeil dans le miroir, vous vérifiez que votre visage est en ordre et que vous êtes présentable dès vos premiers instants dans ce job
Il vous faut atteindre le bureau du patron.
Mais que vous veut-il ?
Ici on produit de l'imaginaire. Des livres, des films, des produits dérivés, des personnages, des mondes, des événements médiatiques, des auteurs, des rêves ou des cauchemars.
Vous avez été recruté dans le cadre du développement de la nouvelle branche de notre corporation, la branche « On Demand ». Les gens de nos jours ne se contentent plus d'une offre généraliste, ils veulent avoir l'impression qu'on ne s'adresse qu'à eux, qu'ils sont les clients d'une expérience unique. Supporteriez-vous de savoir qu'un autre partage vos rêves, même s'ils sont cauchemardesques; qu'un autre ait accès à ce qui est tapi au plus profond de votre être, qui le tapisse même – pardonnez-moi le jeu de mot. Partager ses rêves, c'est partager son être: voilà pourquoi les voleurs de rêves ne sont pas de simples voleurs – et il serait que les députés le comprennent enfin.
Distinguer l'imaginaire de la réalité ! Voici le problème que les philosophes anciens se sont escrimés à liquider, en vain, vous le savez bien. Nous nous débattrions encore avec de tels problèmes si la prophétie de Grand Network n'était advenue. L'imaginaire ne se perçoit que par la réalité, et la réalité que par l'imaginaire: longtemps ils avaient pensé qu'ils étaient la pile et la face, et que le problème de leur union tenait sur la tranche. Tout n'est qu'un problème de dimensions, que visés au modèle en trois dimensions, incapables qu'ils étaient de descendre dans les infra-dimensions et de monter dans les supra-dimensions, ils ne pouvaient résoudre: c'était tout simplement mal posé.
Peut-être nous-mêmes allons nous devoir changer de modèle: vous avez suivi la découverte des méta-dimensions ? Non ? Il faut que vous vous y plongiez de toute urgence. Nous ne pouvons pas ignorer ces nouvelles dimensions imaginaires, si nous voulons rester les acteurs principaux du secteur.
Ce qui m'intéresse en vous, c'est une forme de naïveté.
Votre pureté, votre blancheur diphane, au sens propre: on voit à travers vous
journal d'un fou
Celui de Mathieu Cartailler ?
ou le vôtre ?
Il n'est pas besoin d'être fou pour en écrire: il faut qu'on le lise en croyant que vous l'êtes. Il suffit du titre.
On qualifie de fou celui dont le discours semble incohérent.
Essayer le journal d'un idiot.
TiddlyWiki est un wiki développé par Jeremy Ruston et diffusé à partir de Septembre 2004. Son usage le plus courant est celui de bloc-notes de notes personnel ou bloc-notes, ou bien parfois des romans-dont-vous-êtes-le-héros. L'ensemble du wiki est auto-porteur et tient dans un unique fichier HTML comprenant le contenu, la feuille de style CSS et le code javascript nécessaire à son fonctionnement. Un des trucs les plus géniaux du web de ces dernières années.
<html>
<object height="650" width="100%" type="text/html"
data="http://www.tiddlywiki.com/"></object>
</html>
<!--{{{-->
<div id='header' class='header'>
<div id='title'>
<div id='topMenu' refresh='content' tiddler='MainMenu'></div>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>
</div>
</div>
<!-- <div id='mainMenu' refresh='content' tiddler='MainMenu'></div> -->
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
/***
!!Body
***/
/*{{{*/
html{border-top:40px solid #F3F3F3;}
body {
background:#fff;
width:770px;
margin:0 auto;
font-size: 76%;
color: #64635f;g
font-family: Verdana, Helvetica, sans-serif;
}
/*}}}*/
/***
!!Header
***/
/*{{{*/
#header {background:#fff; padding: 1.0em 0em 0em 0.4em; height:1%;
}
.siteTitle {
font-family: 'Trebuchet MS' sans-serif;
font-weight: bold;
font-size: 16px;
color: #63625F;
background-color: #FFF;
}
#topMenu { positon:relative; float:right; display:inline; margin-left:3em; font-size:15px; font-family: 'Trebuchet MS' sans-serif;}
#topMenu br {display:none; }
#topMenu { background: #fff; color:#000;padding: 0.8em 0em;}
#topMenu a, #topMenu .tiddlyLink, #topMenu .button {margin:0 1em; color:#666;margin-right:0;margin-left:2em; }
#topMenu a:hover, #topMenu .activebutton {border-bottom:5px solid #F16000;}
/*}}}*/
/***
!!displayArea
***/
/*{{{*/
#displayArea {margin-left:0.5em; margin-right:19.3em; margin-top:0.5em; padding-top:0em; padding-bottom:10px;}
/*}}}*/
/***
!!viewer
***/
/*{{{*/
.title,h1, h2, h3, h4, h5, h6 { margin: 0; color: #64635f; font-family: Trebuchet MS, verdana, sans-serif; background:transparent; padding:0;align-left;}
.title { font-size: 2em; margin-bottom: .5em;font-variant:small-caps; font-weight:normal; margin-bottom:0.3em; }
a { color: #F25B00; }
a:hover { color: #F25B00; background:transparent; border-bottom:1px solid #F25B00; }
.viewer {line-height:1.5em; font-family: Verdana, Helvetica, sans-serif; }
.tiddler {padding:0;margin:0;padding-bottom:0.5em;}
/***
!!fix these so can use them in tiddler text. too big? try them all
***/
h1 { font-size: 2em; margin-bottom: .5em;font-variant:small-caps; font-weight:normal; margin-bottom:0.3em; }
h1 em { color: #00C5E8; font-style: normal; background: none; }
h2 { font-size: 1.8em; margin-bottom: .3em; font-weight: normal;font-variant:small-caps; }
h3 { font-size: 1.2em; }
h4 { font-size: 1.1em; font-family: Verdana, Helvetica, sans-serif; }
.externalLink {font-weight:bold;}
.externalLink:hover {border:none;}
.indent{margin-left:0.8em; line-height:1.8em; margin-bottom:0.2em;}
.indent img {margin:0; margin-left:0.8em;}
.big {font-size:1.2em; font-weight:bold; font-variant: small-caps;}
.small {font-size: 0.8em;}
.viewer hr {border:0; border-bottom:1px solid #CACACA; margin:0em 0;}
.viewer .navigator .centre h2 {border:none; margin-bottom:0.5em;}
.centre {text-align:center; padding:0; margin:0.8em 0; }
.centre img {border:1px solid #CACACA;}
/*}}}*/
/***
!!Sidebar
***/
/*{{{*/
#sidebar {position:relative;float:right; line-height: 1.4em; border-left:1px solid #CACACA; display:inline; background:#fff; right:0; padding-left:15px;margin-top:0.5em;
width: 16em;}
#sidebar {font-size:1em;line-height:1.5em; font-family: Verdana, Helvetica, sans-serif; }
.sidebartiddler {padding-bottom:0em; margin-left:0.5em;}
#sidebar img {margin-left:-0.5em; margin-bottom:0.5em;}
#sidebar .indent img {margin-left:0; margin:0;}
#tiddlerSideBar h1, #sidebar h1 {font-size:15px; font-family: 'Trebuchet MS' sans-serif;font-weight:bold; margin-left:-0.5em; margin-bottom:0.5em;}
#tiddlerSideBar h2, #sidebar h2 {font-size:15px; font-family: 'Trebuchet MS' sans-serif;font-weight:bold;}
#tiddlerSideBar hr, #sidebar hr {border:0; border-bottom:1px solid #CACACA; margin:0em 0; margin-left:-0.5em;}
/*}}}*/
/***
!!Navigator
***/
/*{{{*/
.navigatorBar {margin-top:0.5em; margin-right:-12px;margin-left:-12px;}
.navigatorBar table {margin:0 auto;border:0px solid #000;padding:0;border-collapse: separate; margin-top:3px;}
.navigatorBar.button:hover,.navigatorBar .button {color:#f16000; background:transparent; border:none;font-weight:bold;}
.navigatorBar table td {border-spacing: 1px;padding:4px; border:1px solid #64635F;
cursor:pointer;cursor:hand}
.navigatorBar .activenav{background:#64635F}
.navigator {padding:5px 10px 5px 10px; position:relative;height:1%;}
.navNext {float:right; font-variant: small-caps; }
.navPrevious{float:left; font-variant: small-caps;}
.navigator h2 {border-bottom:1px solid #CACACA;}
.viewer .border h1 {color:#f16000; margin-top:-5px;}
.border {border: 1px solid #64635F; padding:10px; padding-top:5px; padding-left:10px; padding-bottom:5px;}
.viewer .topbutton, .viewer .topbutton:hover, .exit .button, .exit .button:hover{border:1px solid #f16000; background:#f16000; color:#fff;padding:0px 3px; margin:0px 0px; font-weight:bold;font-family: arial,helvetica; line-height:1.2em;}
.border .navigator {border:0px solid #fff;}
.right {float:right; display:inline;}
.right .topbutton {margin-right:-10px !important; margin-right:0px;}
#contentWrapper .viewer .nofloat{float:none;}
/*}}}*/
.viewer blockquote {margin-top:0; border:none; background:#f3f3f3; padding:10px; color:#4F4E4A; padding-top:7px; margin-left:0em;}
#tiddlerFAQ ul {margin-top:0; font-variant:small-caps;}
#tiddlerFAQ ul ul li {font-variant:normal;}
.heavy {text-align:center; font-family:'Lucida Grande', Verdana, Sans-Serif; font-size:1.2em; font-weight:bold; font-style:normal;
}
#contentWrapper .missing .title {display:none;}
#contentWrapper .missing .viewer {margin-top:2.5em;}
#sidebar .noborder a:hover {border:none;}
<!--{{{-->
<div macro='hideWhen tiddler.tags.contains("Guides")'>
<div class='title' macro='view title'></div>
</div>
<div class='viewer' macro='view text wikified'></div>
<!--}}}-->
/***
BreadcrumbsPlugin
author: Alan Hecht (with 2.0 update from 'jack' and revisions by Bram Chen)
source: http://groups.google.com/group/TiddlyWikiDev/msg/c23edb5f3c0d8b7e
***/
//{{{
version.extensions.breadCrumbs = {major: 1, minor: 0, revision: 1,
date: new Date("Feb 4, 2006")};
config.breadCrumbs = [];
window.onClickTiddlerLink_orig_breadCrumbs = window.onClickTiddlerLink;
window.onClickTiddlerLink = function(e){
window.onClickTiddlerLink_orig_breadCrumbs(e);
addCrumb(e);
}
function addCrumb(e){
if (!e) var e = window.event;
var thisCrumb = "[[" + resolveTarget(e).getAttribute("tiddlyLink") + "]]";
var ind = config.breadCrumbs.find(thisCrumb);
if(ind == null)
config.breadCrumbs.push(thisCrumb);
else
config.breadCrumbs.length = ind++;
refreshCrumbs();
}
function refreshCrumbs(){
var crumbArea = document.getElementById("breadCrumbs");
if (!crumbArea) {
var crumbArea = document.createElement("div");
crumbArea.id = "breadCrumbs";
crumbArea.style.visibility= "hidden";
var targetArea = document.getElementById("tiddlerDisplay");
targetArea.parentNode.insertBefore(crumbArea,targetArea);
}
crumbArea.style.visibility = "visible";
removeChildren(crumbArea);
createTiddlyButton(crumbArea,"Accueil",null,restartHome);
wikify(" || " + config.breadCrumbs.join(' > '),crumbArea)
}
function restartHome(){
story.closeAllTiddlers();
restart();
config.breadCrumbs = [];
var crumbArea = document.getElementById("breadCrumbs");
crumbArea.style.visibility = "hidden";
}
//}}}
/***
|''Name:''|CryptoFunctionsPlugin|
|''Description:''|Support for cryptographic functions|
***/
//{{{
if(!version.extensions.CryptoFunctionsPlugin) {
version.extensions.CryptoFunctionsPlugin = {installed:true};
//--
//-- Crypto functions and associated conversion routines
//--
// Crypto "namespace"
function Crypto() {}
// Convert a string to an array of big-endian 32-bit words
Crypto.strToBe32s = function(str)
{
var be = Array();
var len = Math.floor(str.length/4);
var i, j;
for(i=0, j=0; i<len; i++, j+=4) {
be[i] = ((str.charCodeAt(j)&0xff) << 24)|((str.charCodeAt(j+1)&0xff) << 16)|((str.charCodeAt(j+2)&0xff) << 8)|(str.charCodeAt(j+3)&0xff);
}
while (j<str.length) {
be[j>>2] |= (str.charCodeAt(j)&0xff)<<(24-(j*8)%32);
j++;
}
return be;
};
// Convert an array of big-endian 32-bit words to a string
Crypto.be32sToStr = function(be)
{
var str = "";
for(var i=0;i<be.length*32;i+=8)
str += String.fromCharCode((be[i>>5]>>>(24-i%32)) & 0xff);
return str;
};
// Convert an array of big-endian 32-bit words to a hex string
Crypto.be32sToHex = function(be)
{
var hex = "0123456789ABCDEF";
var str = "";
for(var i=0;i<be.length*4;i++)
str += hex.charAt((be[i>>2]>>((3-i%4)*8+4))&0xF) + hex.charAt((be[i>>2]>>((3-i%4)*8))&0xF);
return str;
};
// Return, in hex, the SHA-1 hash of a string
Crypto.hexSha1Str = function(str)
{
return Crypto.be32sToHex(Crypto.sha1Str(str));
};
// Return the SHA-1 hash of a string
Crypto.sha1Str = function(str)
{
return Crypto.sha1(Crypto.strToBe32s(str),str.length);
};
// Calculate the SHA-1 hash of an array of blen bytes of big-endian 32-bit words
Crypto.sha1 = function(x,blen)
{
// Add 32-bit integers, wrapping at 32 bits
add32 = function(a,b)
{
var lsw = (a&0xFFFF)+(b&0xFFFF);
var msw = (a>>16)+(b>>16)+(lsw>>16);
return (msw<<16)|(lsw&0xFFFF);
};
// Add five 32-bit integers, wrapping at 32 bits
add32x5 = function(a,b,c,d,e)
{
var lsw = (a&0xFFFF)+(b&0xFFFF)+(c&0xFFFF)+(d&0xFFFF)+(e&0xFFFF);
var msw = (a>>16)+(b>>16)+(c>>16)+(d>>16)+(e>>16)+(lsw>>16);
return (msw<<16)|(lsw&0xFFFF);
};
// Bitwise rotate left a 32-bit integer by 1 bit
rol32 = function(n)
{
return (n>>>31)|(n<<1);
};
var len = blen*8;
// Append padding so length in bits is 448 mod 512
x[len>>5] |= 0x80 << (24-len%32);
// Append length
x[((len+64>>9)<<4)+15] = len;
var w = Array(80);
var k1 = 0x5A827999;
var k2 = 0x6ED9EBA1;
var k3 = 0x8F1BBCDC;
var k4 = 0xCA62C1D6;
var h0 = 0x67452301;
var h1 = 0xEFCDAB89;
var h2 = 0x98BADCFE;
var h3 = 0x10325476;
var h4 = 0xC3D2E1F0;
for(var i=0;i<x.length;i+=16) {
var j,t;
var a = h0;
var b = h1;
var c = h2;
var d = h3;
var e = h4;
for(j = 0;j<16;j++) {
w[j] = x[i+j];
t = add32x5(e,(a>>>27)|(a<<5),d^(b&(c^d)),w[j],k1);
e=d; d=c; c=(b>>>2)|(b<<30); b=a; a = t;
}
for(j=16;j<20;j++) {
w[j] = rol32(w[j-3]^w[j-8]^w[j-14]^w[j-16]);
t = add32x5(e,(a>>>27)|(a<<5),d^(b&(c^d)),w[j],k1);
e=d; d=c; c=(b>>>2)|(b<<30); b=a; a = t;
}
for(j=20;j<40;j++) {
w[j] = rol32(w[j-3]^w[j-8]^w[j-14]^w[j-16]);
t = add32x5(e,(a>>>27)|(a<<5),b^c^d,w[j],k2);
e=d; d=c; c=(b>>>2)|(b<<30); b=a; a = t;
}
for(j=40;j<60;j++) {
w[j] = rol32(w[j-3]^w[j-8]^w[j-14]^w[j-16]);
t = add32x5(e,(a>>>27)|(a<<5),(b&c)|(d&(b|c)),w[j],k3);
e=d; d=c; c=(b>>>2)|(b<<30); b=a; a = t;
}
for(j=60;j<80;j++) {
w[j] = rol32(w[j-3]^w[j-8]^w[j-14]^w[j-16]);
t = add32x5(e,(a>>>27)|(a<<5),b^c^d,w[j],k4);
e=d; d=c; c=(b>>>2)|(b<<30); b=a; a = t;
}
h0 = add32(h0,a);
h1 = add32(h1,b);
h2 = add32(h2,c);
h3 = add32(h3,d);
h4 = add32(h4,e);
}
return Array(h0,h1,h2,h3,h4);
};
}
//}}}
/***
|''Name:''|DeprecatedFunctionsPlugin|
|''Description:''|Support for deprecated functions removed from core|
***/
//{{{
if(!version.extensions.DeprecatedFunctionsPlugin) {
version.extensions.DeprecatedFunctionsPlugin = {installed:true};
//--
//-- Deprecated code
//--
// @Deprecated: Use createElementAndWikify and this.termRegExp instead
config.formatterHelpers.charFormatHelper = function(w)
{
w.subWikify(createTiddlyElement(w.output,this.element),this.terminator);
};
// @Deprecated: Use enclosedTextHelper and this.lookaheadRegExp instead
config.formatterHelpers.monospacedByLineHelper = function(w)
{
var lookaheadRegExp = new RegExp(this.lookahead,"mg");
lookaheadRegExp.lastIndex = w.matchStart;
var lookaheadMatch = lookaheadRegExp.exec(w.source);
if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
var text = lookaheadMatch[1];
if(config.browser.isIE)
text = text.replace(/\n/g,"\r");
createTiddlyElement(w.output,"pre",null,null,text);
w.nextMatch = lookaheadRegExp.lastIndex;
}
};
// @Deprecated: Use <br> or <br /> instead of <<br>>
config.macros.br = {};
config.macros.br.handler = function(place)
{
createTiddlyElement(place,"br");
};
// Find an entry in an array. Returns the array index or null
// @Deprecated: Use indexOf instead
Array.prototype.find = function(item)
{
var i = this.indexOf(item);
return i == -1 ? null : i;
};
// Load a tiddler from an HTML DIV. The caller should make sure to later call Tiddler.changed()
// @Deprecated: Use store.getLoader().internalizeTiddler instead
Tiddler.prototype.loadFromDiv = function(divRef,title)
{
return store.getLoader().internalizeTiddler(store,this,title,divRef);
};
// Format the text for storage in an HTML DIV
// @Deprecated Use store.getSaver().externalizeTiddler instead.
Tiddler.prototype.saveToDiv = function()
{
return store.getSaver().externalizeTiddler(store,this);
};
// @Deprecated: Use store.allTiddlersAsHtml() instead
function allTiddlersAsHtml()
{
return store.allTiddlersAsHtml();
}
// @Deprecated: Use refreshPageTemplate instead
function applyPageTemplate(title)
{
refreshPageTemplate(title);
}
// @Deprecated: Use story.displayTiddlers instead
function displayTiddlers(srcElement,titles,template,unused1,unused2,animate,unused3)
{
story.displayTiddlers(srcElement,titles,template,animate);
}
// @Deprecated: Use story.displayTiddler instead
function displayTiddler(srcElement,title,template,unused1,unused2,animate,unused3)
{
story.displayTiddler(srcElement,title,template,animate);
}
// @Deprecated: Use functions on right hand side directly instead
var createTiddlerPopup = Popup.create;
var scrollToTiddlerPopup = Popup.show;
var hideTiddlerPopup = Popup.remove;
// @Deprecated: Use right hand side directly instead
var regexpBackSlashEn = new RegExp("\\\\n","mg");
var regexpBackSlash = new RegExp("\\\\","mg");
var regexpBackSlashEss = new RegExp("\\\\s","mg");
var regexpNewLine = new RegExp("\n","mg");
var regexpCarriageReturn = new RegExp("\r","mg");
}
//}}}
<!---
| Name:|~TagglyTaggingEditTemplate |
| Version:|1.1 (12-Jan-2006)|
| Source:|http://simonbaird.com/mptw/#TagglyTaggingEditTemplate|
| Purpose:|See TagglyTagging for more info|
| Requires:|You need the CSS in TagglyTaggingStyles to make it look right|
-->
<!--{{{-->
<div class='toolbar' macro='toolbar wikibar +saveTiddler -cancelTiddler deleteTiddler'></div>
<div class='toolbar' macro='toolbar slice '></div>
<div class='title' macro='view title'></div>
<div class='editLabel'>Title</div><div class='editor' macro='edit title'></div>
<div class='editLabel'>Tags</div><div class='editor' macro='edit tags'></div>
<div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser'></span></div>
<div class='editor' macro='edit text'></div>
<br>
<!--}}}-->
/***
|Name|FontSizePlugin|
|Created by|SaqImtiaz|
|Location|http://lewcid.googlepages.com/lewcid.html#FontSizePlugin|
|Version|1.0|
|Requires|~TW2.x|
!Description:
Resize tiddler text on the fly. The text size is remembered between sessions by use of a cookie.
You can customize the maximum and minimum allowed sizes.
(only affects tiddler content text, not any other text)
Also, you can load a TW file with a font-size specified in the url.
Eg: http://lewcid.googlepages.com/lewcid.html#font:110
!Demo:
Try using the font-size buttons in the sidebar, or in the MainMenu above.
!Installation:
Copy the contents of this tiddler to your TW, tag with systemConfig, save and reload your TW.
Then put {{{<<fontSize "font-size:">>}}} in your SideBarOptions tiddler, or anywhere else that you might like.
!Usage
{{{<<fontSize>>}}} results in <<fontSize>>
{{{<<fontSize font-size: >>}}} results in <<fontSize font-size:>>
!Customizing:
The buttons and prefix text are wrapped in a span with class fontResizer, for easy css styling.
To change the default font-size, and the maximum and minimum font-size allowed, edit the config.fontSize.settings section of the code below.
!Notes:
This plugin assumes that the initial font-size is 100% and then increases or decreases the size by 10%. This stepsize of 10% can also be customized.
!History:
*27-07-06, version 1.0 : prevented double clicks from triggering editing of containing tiddler.
*25-07-06, version 0.9
!Code
***/
//{{{
config.fontSize={};
//configuration settings
config.fontSize.settings =
{
defaultSize : 100, // all sizes in %
maxSize : 200,
minSize : 40,
stepSize : 10
};
//startup code
var fontSettings = config.fontSize.settings;
if (!config.options.txtFontSize)
{config.options.txtFontSize = fontSettings.defaultSize;
saveOptionCookie("txtFontSize");}
setStylesheet(".tiddler .viewer {font-size:"+config.options.txtFontSize+"%;}\n","fontResizerStyles");
setStylesheet("#contentWrapper .fontResizer .button {display:inline;font-size:105%; font-weight:bold; margin:0 1px; padding: 0 3px; text-align:center !important;}\n .fontResizer {margin:0 0.5em;}","fontResizerButtonStyles");
//macro
config.macros.fontSize={};
config.macros.fontSize.handler = function (place,macroName,params,wikifier,paramString,tiddler)
{
var sp = createTiddlyElement(place,"span",null,"fontResizer");
sp.ondblclick=this.onDblClick;
if (params[0])
createTiddlyText(sp,params[0]);
createTiddlyButton(sp,"+","increase font-size",this.incFont);
createTiddlyButton(sp,"=","reset font-size",this.resetFont);
createTiddlyButton(sp,"–","decrease font-size",this.decFont);
}
config.macros.fontSize.onDblClick = function (e)
{
if (!e) var e = window.event;
e.cancelBubble = true;
if (e.stopPropagation) e.stopPropagation();
return false;
}
config.macros.fontSize.setFont = function ()
{
saveOptionCookie("txtFontSize");
setStylesheet(".tiddler .viewer {font-size:"+config.options.txtFontSize+"%;}\n","fontResizerStyles");
}
config.macros.fontSize.incFont=function()
{
if (config.options.txtFontSize < fontSettings.maxSize)
config.options.txtFontSize = (config.options.txtFontSize*1)+fontSettings.stepSize;
config.macros.fontSize.setFont();
}
config.macros.fontSize.decFont=function()
{
if (config.options.txtFontSize > fontSettings.minSize)
config.options.txtFontSize = (config.options.txtFontSize*1) - fontSettings.stepSize;
config.macros.fontSize.setFont();
}
config.macros.fontSize.resetFont=function()
{
config.options.txtFontSize=fontSettings.defaultSize;
config.macros.fontSize.setFont();
}
config.paramifiers.font =
{
onstart: function(v)
{
config.options.txtFontSize = v;
config.macros.fontSize.setFont();
}
};
//}}}
/***
|Name:|HideWhenMacro|
|Author:|SimonBaird|
|Source:|http://tiddlyspot.com/mptw/#HideWhenMacro|
|Version:|1.0.1|
|Date:|30-Jul-2006|
!Description
Implements hideWhen and showWhen macros for use in ViewTemplate
!Example
{{{<div macro="showWhen tiddler.tags.contains('Task')">[[TaskToolbar]]</div>}}}
***/
//{{{
merge(config.macros,{
hideWhen: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
if (eval(paramString)) {
removeChildren(place);
place.parentNode.removeChild(place);
}
}},
showWhen: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
config.macros.hideWhen.handler(place,macroName,params,wikifier,'!('+paramString+')',tiddler);
}}
});
//}}}
/***
|''Name:''|LegacyStrikeThroughPlugin|
|''Description:''|Support for legacy (pre 2.1) strike through formatting|
|''Version:''|1.0.2|
|''Date:''|Jul 21, 2006|
|''Source:''|http://www.tiddlywiki.com/#LegacyStrikeThroughPlugin|
|''Author:''|MartinBudden (mjbudden (at) gmail (dot) com)|
|''License:''|[[BSD open source license]]|
|''CoreVersion:''|2.1.0|
***/
//{{{
// Ensure that the LegacyStrikeThrough Plugin is only installed once.
if(!version.extensions.LegacyStrikeThroughPlugin) {
version.extensions.LegacyStrikeThroughPlugin = {installed:true};
config.formatters.push(
{
name: "legacyStrikeByChar",
match: "==",
termRegExp: /(==)/mg,
element: "strike",
handler: config.formatterHelpers.createElementAndWikify
});
} //# end of "install only once"
//}}}
[[Début|001]]
<<search>>
<<fontSize>>
[[Contact|mailto:qarqi.qarqi@gmail.com]]
<script language="JavaScript">
document.write(displayCounter());
</script>
<script language="JavaScript" type="text/JavaScript" src="/common/site.js">
</script>
<!--{{{-->
<div id='header' class='header'>
<div id='title'>
<div id='topMenu' refresh='content' tiddler='MainMenu'></div>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>
</div>
</div>
<!-- <div id='mainMenu' refresh='content' tiddler='MainMenu'></div> -->
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
<<closeAll>><<permaview>><<newTiddler tag:roman>><<saveChanges>><<slider chkSliderOptionsPanel OptionsPanel 'options »' 'Modifier les options avancées de ce TiddlyWiki'>>
/***
|''Name:''|SinglePageModePlugin|
|''Source:''|http://www.TiddlyTools.com/#SinglePageModePlugin|
|''Author:''|Eric Shulman - ELS Design Studios|
|''License:''|[[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|''~CoreVersion:''|2.0.10|
!!!!!Credits
<<<
This feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]].
Support for BACK/FORWARD buttons adapted from code developed by Clint Checketts
<<<
!!!!!Code
***/
//{{{
version.extensions.SinglePageMode= {major: 2, minor: 2, revision: 1, date: new Date(2006,7,3)};
config.options.chkSinglePageMode=true;
if (config.options.chkSinglePageMode==undefined) config.options.chkSinglePageMode=false;
config.shadowTiddlers.AdvancedOptions += "\n<<option chkSinglePageMode>> Display one tiddler at a time";
if (config.options.chkTopOfPageMode==undefined) config.options.chkTopOfPageMode=false;
config.shadowTiddlers.AdvancedOptions += "\n<<option chkTopOfPageMode>> Always open tiddlers at the top of the page";
config.SPMTimer = 0;
config.lastURL = window.location.hash;
function checkLastURL()
{
if (!config.options.chkSinglePageMode)
{ window.clearInterval(config.SPMTimer); config.SPMTimer=0; return; }
if (config.lastURL == window.location.hash)
return;
var tiddlerName = convertUTF8ToUnicode(decodeURI(window.location.hash.substr(1)));
tiddlerName=tiddlerName.replace(/\[\[/,"").replace(/\]\]/,""); // strip any [[ ]] bracketing
if (tiddlerName.length) story.displayTiddler(null,tiddlerName,1,null,null);
}
if (Story.prototype.SPM_coreDisplayTiddler==undefined) Story.prototype.SPM_coreDisplayTiddler=Story.prototype.displayTiddler;
Story.prototype.displayTiddler = function(srcElement,title,template,animate,slowly)
{
if (config.options.chkSinglePageMode) {
window.location.hash = encodeURIComponent(String.encodeTiddlyLink(title));
config.lastURL = window.location.hash;
document.title = wikifyPlain("SiteTitle") + " - " + title;
story.closeAllTiddlers();
if (!config.SPMTimer) config.SPMTimer=window.setInterval(function() {checkLastURL();},1000);
}
if (config.options.chkTopOfPageMode) { story.closeTiddler(title); window.scrollTo(0,0); srcElement=null; }
window.scrollTo(0,0);
this.SPM_coreDisplayTiddler(null,title,template,animate,slowly)
}
if (Story.prototype.SPM_coreDisplayTiddlers==undefined) Story.prototype.SPM_coreDisplayTiddlers=Story.prototype.displayTiddlers;
Story.prototype.displayTiddlers = function(srcElement,titles,template,unused1,unused2,animate,slowly)
{
// suspend single-page mode when displaying multiple tiddlers
var saveSPM=config.options.chkSinglePageMode; config.options.chkSinglePageMode=false;
var saveTPM=config.options.chkTopOfPageMode; config.options.chkTopOfPageMode=false;
this.SPM_coreDisplayTiddlers(srcElement,titles,template,unused1,unused2,animate,slowly);
config.options.chkSinglePageMode=saveSPM; config.options.chkTopOfPageMode=saveTPM;
}
//}}}
roman dont vous êtes le héros
<html><big style="color: #ff0000;"><big><big>Où est le 300ème ?</big></big></big><br><toolbar fields=""></toolbar></html>
/***
|''Name:''|SparklinePlugin|
|''Description:''|Sparklines macro|
***/
//{{{
if(!version.extensions.SparklinePlugin) {
version.extensions.SparklinePlugin = {installed:true};
//--
//-- Sparklines
//--
config.macros.sparkline = {};
config.macros.sparkline.handler = function(place,macroName,params)
{
var data = [];
var min = 0;
var max = 0;
var v;
for(var t=0; t<params.length; t++) {
v = parseInt(params[t]);
if(v < min)
min = v;
if(v > max)
max = v;
data.push(v);
}
if(data.length < 1)
return;
var box = createTiddlyElement(place,"span",null,"sparkline",String.fromCharCode(160));
box.title = data.join(",");
var w = box.offsetWidth;
var h = box.offsetHeight;
box.style.paddingRight = (data.length * 2 - w) + "px";
box.style.position = "relative";
for(var d=0; d<data.length; d++) {
var tick = document.createElement("img");
tick.border = 0;
tick.className = "sparktick";
tick.style.position = "absolute";
tick.src = "data:image/gif,GIF89a%01%00%01%00%91%FF%00%FF%FF%FF%00%00%00%C0%C0%C0%00%00%00!%F9%04%01%00%00%02%00%2C%00%00%00%00%01%00%01%00%40%02%02T%01%00%3B";
tick.style.left = d*2 + "px";
tick.style.width = "2px";
v = Math.floor(((data[d] - min)/(max-min)) * h);
tick.style.top = (h-v) + "px";
tick.style.height = v + "px";
box.appendChild(tick);
}
};
}
//}}}
<<timeline better:true excludeTag:systemConfig sortBy:created maxEntries:50>>
/*{{{*/
.leaf, .subtree {display:block; margin-left : 0.5em}
.subtree {margin-bottom:0.5em}
#mainMenu {text-align:left}
.branch .button {border:1px solid #DDD; color:#AAA;font-size:9px;padding:0 2px;margin-right:0.3em;vertical-align:middle;text-align:center;}
/*}}}*/
[[NewerHereMacro]]
[[ViewTemplate]]
[[NewHereCommand]]
[[carte]]
[[002]]
[[001]]
[[003]]
<!--{{{-->
<div macro='hideWhen tiddler.tags.contains("Guides")'>
<div class='title' macro='view title'></div>
</div>
<div class='viewer' macro='view text wikified'></div>
<!--}}}-->
A travailler ou à re-travailler
Devant la large glace, un plan carrelé, avec deux lavabo. C'est si pratique, après une douce nuit de caresses, d'enlacements et de souffles mêles, pour s'embrasser encore de regards amoureux.
Mais, à vous , ils ne sont qu'un rappel douloureux de votre solitude.
Vous vous dévêtez, lentement. Une torpeur vous a gagné depuis que vous avez mis le pied dans la chambre.
Un malaise,aussi. Mais ça, depuis le hall de l'immeuble... L'impression d'un regard toujours dans le dos, qui vous examinerait, jusqu'au plus profond, jusqu'à ce que vous voulez cacher.
L'eau coule , presque bouillante. Vous restez longtemps immobile sous le jet, avant de vous savonner.
Après 5 min, vous sortez, vous enfilez la tenue la plus charmante que vous avez dans votre valise.
/***
|''Name:''|YourSearchPlugin|
|''Version:''|2.1.0 (2006-10-12)|
|''Source:''|http://tiddlywiki.abego-software.de/#YourSearchPlugin ([[del.icio.us|http://del.icio.us/post?url=http://tiddlywiki.abego-software.de/index.html%23YourSearchPlugin]])|
|''Author:''|UdoBorkowski (ub [at] abego-software [dot] de)|
|''Licence:''|[[BSD open source license (abego Software)|http://www.abego-software.de/legal/apl-v10.html]]|
|''Copyright:''|© 2005-2006 [[abego Software|http://www.abego-software.de]]|
|''~CoreVersion:''|2.1.0|
|''Browser:''|Firefox 1.0.4+; Firefox 1.5; ~InternetExplorer 6.0|
!About YourSearch
YourSearch gives you a bunch of new features to simplify and speed up your daily searches in TiddlyWiki. It seamlessly integrates into the standard TiddlyWiki search: just start typing into the 'search' field and explore!
For more information see [[Help|YourSearch Help]].
!Compatibility
This plugin requires TiddlyWiki 2.1.
Check the [[archive|http://tiddlywiki.abego-software.de/archive]] for ~YourSearchPlugins supporting older versions of TiddlyWiki.
!Revision history
* v2.1.0 (2006-10-12)
** Release version with TiddlyWiki 2.1 support
*** Support (Extended) Field search
*** Support parenthesis in Boolean Search
*** Support direct regular expression input
*** Support JavaScript Expressions for filtering
*** "new tiddler" feature (create tiddler based on search text)
* v2.0.2 (2006-02-13)
** Bugfix for Firefox 1.5.0.1 related to the "Show prefix" checkbox. Thanks to Ted Pavlic for reporting and to BramChen for fixing.
** Internal
*** Make "JSLint" conform
* v2.0.1 (2006-02-05)
** Support "Exact Word Match" (use '=' to prefix word)
** Support default filter settings (when no filter flags are given in search term)
** Rework on the "less than 3 chars search text" feature (thanks to EricShulman)
** Better support SinglePageMode when doing "Open all tiddlers" (thanks to EricShulman)
** Support Firefox 1.5.0.1
** Bug: Fixed a hilite bug in "classic search mode" (thanks to EricShulman)
* v2.0.0 (2006-01-16)
** Add User Interface
* v1.0.1 (2006-01-06)
** Support TiddlyWiki 2.0
* v1.0.0 (2005-12-28)
** initial version
!Source Code
***/
//{{{
//============================================================================
//============================================================================
// YourSearchPlugin
//============================================================================
//============================================================================
// Ensure that the Plugin is only installed once.
//
if (!version.extensions.YourSearchPlugin) {
version.extensions.YourSearchPlugin = {
major: 2, minor: 1, revision: 0,
source: "http://tiddlywiki.abego-software.de/#YourSearchPlugin",
licence: "[[BSD open source license (abego Software)|http://www.abego-software.de/legal/apl-v10.html]]",
copyright: "Copyright (c) abego Software GmbH, 2005-2006 (www.abego-software.de)"
};
if (!window.abego) window.abego = {};
// define the Array forEach when not yet defined (e.g. by Mozilla)
if (!Array.forEach) {
Array.forEach = function(obj, callback, thisObj) {
for (var i = 0,len = obj.length; i < len; i++)
callback.call(thisObj, obj[i], i, obj);
};
Array.prototype.forEach = function(callback, thisObj) {
for (var i = 0,len = this.length; i < len; i++)
callback.call(thisObj, this[i], i, this);
};
}
abego.toInt = function(s, defaultValue) {
if (!s) return defaultValue;
var n = parseInt(s);
return (n == NaN) ? defaultValue : n;
};
abego.createEllipsis = function(place) {
var e = createTiddlyElement(place,"span");
e.innerHTML = "…";
};
//#concept Object
//
abego.shallowCopy = function(object) {
if (!object)
return object;
var result = {};
for (var n in object)
result[n] = object[n];
return result;
};
// Returns a shallow copy of the options, or a new, empty object if options is null/undefined.
//
// @param options [may be null/undefined]
//
//#concept Object, Options
//#import abego.shallowCopy
//
abego.copyOptions = function(options) {
return !options ? {} : abego.shallowCopy(options);
};
//#import abego.define-namespace
// returns the number of occurances of s in the text
abego.countStrings = function(text, s) {
if (!s)
return 0;
var len = s.length;
var n = 0;
var lastIndex = 0;
while (1) {
var i = text.indexOf(s, lastIndex);
if (i < 0)
return n;
n++;
lastIndex = i+len;
}
return n;
};// Returns the content of the first "braced" text {...}
// Also takes care of nested braces
//
// Returns undefined when no braced text is found or it is not properly nested
//
// @param [optional] when defined and a braced text is found lastIndexRef.lastIndex will contain the index of the char following the (final) closing brace on return.
//
abego.getBracedText = function(text, offset,lastIndexRef) {
if (!offset) offset = 0;
var re = /\{([^\}]*)\}/gm;
re.lastIndex = offset;
var m = re.exec(text);
if (m) {
// The matching stopped at the first closing brace.
// But if the matched text contains opening braces
// this is not the final closing brace.
// Handle this case specially, find the "corresponding" closing brace
var s = m[1];
var nExtraOpenBrace = abego.countStrings(s,"{");
if (!nExtraOpenBrace) {
if (lastIndexRef)
lastIndexRef.lastIndex = re.lastIndex;
// simple case: no nested braces
return s;
}
// special case: "nested braces"
var len = text.length;
for (var i = re.lastIndex; i < len && nExtraOpenBrace; i++) {
var c = text.charAt(i);
if (c == "{")
nExtraOpenBrace++;
else if (c == "}")
nExtraOpenBrace--;
}
if (!nExtraOpenBrace) {
// found the corresponding "}".
if (lastIndexRef)
lastIndexRef.lastIndex = i-1;
return text.substring(m.index+1, i-1);
}
}
// no return means: return undefined;
};
// Returns an array with those items from the array that pass the given test
//
// @param test an one-arg boolean function that returns true when the item should be added.
// @param testObj [optional] the receiver for the test function (global if undefined or null)
// @param result [optional] an array. When define the selected items are added to this array, otherwise a new array is used.
//
//#import Array.prototype.forEach
//
abego.select = function(array,test,testObj,result) {
if (!result) result = [];
array.forEach(function(t) {
if (test.call(testObj,t))
result.push(t);
});
return result;
};
// Class abego.TiddlerFilterTerm =================================================================
//
// Used to check if a tiddler contains a given text.
//
// A list of fields (standard and/or extended) may be specified to restrict the search to certain fields.
//
// When no explicit fields are given the fields defined by defaultFields are checked, plus all extended
// fields (when options.withExtendedFields is true).
//
// @param options [may be null/undefined]
// options.fields @seeParam abego.MultiFieldRegExpTester.fields
// options.withExtendedFields @seeParam abego.MultiFieldRegExpTester.withExtendedFields
// options.caseSensitive [Default: false]
// options.fullWordMatch [Default: false]
// options.textIsRegExp [Default: false] when true the given text is already a regExp
//
//#import abego.MultiFieldRegExpTester
//
abego.TiddlerFilterTerm = function(text,options) {
if (!options) options = {};
var reText = text;
if (!options.textIsRegExp) {
reText = text.escapeRegExp();
if (options.fullWordMatch)
reText = "\\b"+reText+"\\b";
}
var regExp = new RegExp(reText, "m"+(options.caseSensitive ? "" : "i"));
this.tester = new abego.MultiFieldRegExpTester(regExp, options.fields, options.withExtendedFields);
}
abego.TiddlerFilterTerm.prototype.test = function(tiddler) {
return this.tester.test(tiddler);
}
//#import abego.define-namespace
// Recognize a string like
// "Some Title. Some content text #Tag1 #Tag2 Tag3"
// with the tags and the text being optional.
// Also the period at the end of the title is optional when no content text is specified)
//
// Returns the result in an object with properties "title" and "params",
// with "params" following the parseParams format, containing the "tag" and "text" arguments.
//
abego.parseNewTiddlerCommandLine = function(s) {
var m = /(.*?)\.(?:\s+|$)([^#]*)(#.*)?/.exec(s);
if (!m)
m = /([^#]*)()(#.*)?/.exec(s);
if (m) {
var r;
if (m[3]) {
var s2 = m[3].replace(/#/g,"");
r = s2.parseParams("tag");
} else
r = [[]];
// add the text parameter
var text = m[2]?m[2].trim():"";
r.push({name: "text", value: text});
r[0].text = [text];
return {title: m[1].trim(), params: r};
} else
return {title: s.trim(),params: [[]]};
}
// options.defaultFields [@seeOptionDefault abego.TiddlerFilterTerm.fields] fields to check when no fields are explicitly specified in queryText.
// options.withExtendedFields [@seeOptionDefault abego.TiddlerFilterTerm.withExtendedFields] when true and no fields are explicitly specified in queryText also the extended fields are considered (in addition to the ones in defaultFields).
// @seeOptions abego.TiddlerFilterTerm (-fields -fullWordMatch -withExtendedFields)
//
//#import abego.getBracedText
//#import abego.copyOptions
//#import abego.TiddlerFilterTerm
//
abego.parseTiddlerFilterTerm = function(queryText,offset,options) {
// group 1: {...} (JavaScript expression)
// group 2: '=' (full word match (optional))
// group 3: [!%#] (field selection short cuts)
// group 4: fieldName ':'
// group 5: String literal "..."
// group 6: RegExp literal /.../
// group 7: scheme '://' nonSpaceChars
// group 8: word
var re = /\s*(?:(?:\{([^\}]*)\})|(?:(=)|([#%!])|(?:(\w+)\s*\:(?!\/\/))|(?:(?:("(?:(?:\\")|[^"])+")|(?:\/((?:(?:\\\/)|[^\/])+)\/)|(\w+\:\/\/[^\s]+)|([^\s\)\-\"]+)))))/mg;
var shortCuts = {'!':'title','%':'text','#':'tags'};
var fieldNames = {};
var fullWordMatch;
re.lastIndex = offset;
while (1) {
var i = re.lastIndex;
var m = re.exec(queryText);
if (!m || m.index != i)
throw "Word or String literal expected";
if (m[1]) {
var lastIndexRef = {};
var code = abego.getBracedText(queryText,0,lastIndexRef);
if (!code)
throw "Invalid {...} syntax";
var f = Function("tiddler","return ("+code+");");
return {func: f,
lastIndex:lastIndexRef.lastIndex,
markRE: null};
}
if (m[2])
fullWordMatch = true;
else if (m[3])
fieldNames[shortCuts[m[3]]] = 1;
else if (m[4])
fieldNames[m[4]] = 1;
else {
var textIsRegExp = m[6];
var text = m[5] ? window.eval(m[5]) : m[6] ? m[6] : m[7] ? m[7] : m[8];
var options = abego.copyOptions(options);
options.fullWordMatch = fullWordMatch;
options.textIsRegExp = textIsRegExp;
var fields = [];
for (var n in fieldNames)
fields.push(n);
if (fields.length == 0) {
options.fields = options.defaultFields;
} else {
options.fields = fields;
options.withExtendedFields = false;
}
var term = new abego.TiddlerFilterTerm(text,options);
var markREText = textIsRegExp ? text : text.escapeRegExp();
if (markREText && fullWordMatch)
markREText = "\\b"+markREText+"\\b";
return {func: function(tiddler) {return term.test(tiddler);},
lastIndex:re.lastIndex,
markRE: markREText ? "(?:"+markREText+")" : null};
}
}
};
// Class abego.BoolExp =================================================================
//
// Allows the execution/evaluation of a boolean expression, according to this syntax:
//
// boolExpression : unaryExpression (("AND"|"OR"|"&&"|"||")? unaryExpression)*
// ;
//
// unaryExpression : ("not"|"-")? primaryExpression
// ;
//
// primaryExpression : "(" boolExpression ")"
// | Term
// ;
//
// For flexibility the Term syntax is defined by a separate parse function.
//
// Notice that there is no precedence between "AND" and "OR" operators, i.e. they are evaluated from left to right.
//
// To evaluate the expression in a given context use code like this:
//
// var be = new abego.BoolExp(s, termParseFunc);
// var result = be.exec(context);
//
// @param s the text defining the expression
// @param parseTermFunc a Function(text,offset,options) that parses the text starting at offset for a "Term" and returns an object with properties {func: Function(context), lastIndex: ...}. func is the function to be used to evaluate the term in the given context.
// @param options [may be null/undefined] (is also passed to the parseTermFunc)
// options.defaultOperationIs_OR [Default: false] When true the concatenation of unaryExpressions (without an operator) is interpreted as an "OR", otherwise as an "AND".
// options.caseSensitive [default: false]
//
abego.BoolExp = function(s, parseTermFunc, options) {
this.s = s;
var defaultOperationIs_OR = options && options.defaultOperationIs_OR;
var reStart = /\s*(?:(\-|not)|(\())/gi; // group 1: NOT, group2 "("
var reCloseParenthesis = /\s*\)/g; // match )
var reAndOr = /\s*(?:(and|\&\&)|(or|\|\|))/gi; // group 1: AND, group 2: OR
var reNonWhiteSpace = /\s*[^\)\s]/g;
var reNot_Parenthesis = /\s*(\-|not)?(\s*\()?/gi;
var parseUnaryExpression = function(offset) {
reNot_Parenthesis.lastIndex = offset;
var m = reNot_Parenthesis.exec(s);
var negate;
var result;
if (m && m.index == offset) {
offset = reNot_Parenthesis.lastIndex;
negate = m[1];
if (m[2]) {
// case: (...)
var e = parseBoolExpression(offset);
reCloseParenthesis.lastIndex = e.lastIndex;
if (!reCloseParenthesis.exec(s))
throw "Missing ')'";
result = {func: e.func, lastIndex: reCloseParenthesis.lastIndex};
}
}
if (!result)
result = parseTermFunc(s,offset,options);
if (negate) {
result.func = (function(f){return function(context) {return !f(context);}})(result.func);
// don't mark patterns that are negated
// (This is essential since the marking may also be used to calculate "ranks". If we
// would also count the negated matches (i.e. that should not exist) the rank may get too high)
result.markRE = null;
}
return result;
};
var parseBoolExpression = function(offset) {
var result = parseUnaryExpression(offset);
while (1) {
var l = result.lastIndex;
reAndOr.lastIndex = l;
var m = reAndOr.exec(s);
var isOrCase;
var nextExp;
if (m && m.index == l) {
isOrCase = !m[1];
nextExp = parseUnaryExpression(reAndOr.lastIndex);
} else {
// no "AND" or "OR" found.
// Maybe it is a concatenations of parseUnaryExpression without operators
try {
nextExp = parseUnaryExpression(l);
} catch (e) {
// no unary expression follows. We are done
return result;
}
isOrCase = defaultOperationIs_OR;
}
result.func = (function(func1, func2, isOrCase) {
return isOrCase
? function(context) {return func1(context) || func2(context);}
: function(context) {return func1(context) && func2(context);};
})(result.func,nextExp.func,isOrCase);
result.lastIndex = nextExp.lastIndex;
if (!result.markRE)
result.markRE = nextExp.markRE;
else if (nextExp.markRE)
result.markRE = result.markRE + "|" + nextExp.markRE;
}
};
var expr = parseBoolExpression(0);
this.evalFunc = expr.func;
if (expr.markRE)
this.markRegExp = new RegExp(expr.markRE, options.caseSensitive ? "mg" : "img");
}
abego.BoolExp.prototype.exec = function() {
return this.evalFunc.apply(this,arguments);
};
abego.BoolExp.prototype.getMarkRegExp = function() {
return this.markRegExp;
};
abego.BoolExp.prototype.toString = function() {
return this.s;
};
// Class abego.MultiFieldRegExpTester ==================================================================
//
// @param fields [optional; Default: ["title","text","tags"]] array of names of fields to be considered
// @param withExtendedFields [optional; Default: false] when true also extended fields are considered (in addition to the ones given in 'fields')
//
abego.MultiFieldRegExpTester = function(re, fields, withExtendedFields) {
this.re = re;
this.fields = fields ? fields : ["title","text","tags"];
this.withExtendedFields = withExtendedFields;
}
// Returns the name of the first field found that value succeeds the given test,
// or null when no such field is found
//
abego.MultiFieldRegExpTester.prototype.test = function(tiddler) {
var re = this.re;
// Check the fields explicitly specified
for (var i = 0; i < this.fields.length; i++) {
var s = store.getValue(tiddler, this.fields[i]);
if (typeof s == "string" && re.test(s))
return this.fields[i];
}
// Check the extended fields (if required)
if (this.withExtendedFields)
return store.forEachField(
tiddler,
function(tiddler, fieldName, value) {
return typeof value == "string" && re.test(value)?fieldName:null;
}, true);
return null;
}
// Class abego.TiddlerQuery ==================================================================
//
//#import abego.select
//#import abego.MultiFieldRegExpTester
//
abego.TiddlerQuery = function(queryText,caseSensitive,useRegExp,defaultFields,withExtendedFields) {
if (useRegExp) {
this.regExp = new RegExp(queryText, caseSensitive ? "mg" : "img");
this.tester = new abego.MultiFieldRegExpTester(this.regExp, defaultFields, withExtendedFields);
} else {
this.expr = new abego.BoolExp(
queryText,
abego.parseTiddlerFilterTerm, {
defaultFields: defaultFields,
caseSensitive: caseSensitive,
withExtendedFields: withExtendedFields});
}
this.getQueryText = function() {
return queryText;
};
this.getUseRegExp = function() {
return useRegExp;
};
this.getCaseSensitive = function() {
return caseSensitive;
};
this.getDefaultFields = function() {
return defaultFields;
};
this.getWithExtendedFields = function() {
return withExtendedFields;
};
}
// Returns true iff the query includes the given tiddler
//
// @param tiddler [may be null/undefined]
//
abego.TiddlerQuery.prototype.test = function(tiddler) {
if (!tiddler) return false;
if (this.regExp) {
return this.tester.test(tiddler);
}
return this.expr.exec(tiddler);
};
// Returns an array with those tiddlers from the tiddlers array that match the query.
//
abego.TiddlerQuery.prototype.filter = function(tiddlers) {
return abego.select(tiddlers,this.test,this);
};
abego.TiddlerQuery.prototype.getMarkRegExp = function() {
if (this.regExp) {
// Only use the regExp for marking when it does not match the empty string.
return "".search(this.regExp) >= 0 ? null : this.regExp;
}
return this.expr.getMarkRegExp();
};
abego.TiddlerQuery.prototype.toString = function() {
return (this.regExp ? this.regExp : this.expr).toString();
};
// Class abego.PageWiseRenderer ================================================
//
// Subclass or instance must implement getItemsPerPage function;
// They should also implement onPageChanged and refresh the container of the
// PageWiseRenderer on that event.
//
//#import abego.toInt
//
abego.PageWiseRenderer = function() {
this.firstIndexOnPage = 0; // The index of the first item of the lastResults list displayed on the search result page
};
merge(abego.PageWiseRenderer.prototype, {
setItems: function(items) {
this.items = items;
this.setFirstIndexOnPage(0);
},
// Maximum number of pages listed in the navigation bar (before or after the current page)
//
getMaxPagesInNavigation: function() {
return 10;
},
getItemsCount: function(items) {
return this.items ? this.items.length : 0;
},
getCurrentPageIndex: function() {
return Math.floor(this.firstIndexOnPage / this.getItemsPerPage());
},
getLastPageIndex: function() {
return Math.floor((this.getItemsCount()-1) / this.getItemsPerPage())
},
setFirstIndexOnPage: function(index) {
this.firstIndexOnPage = Math.min(Math.max(0, index), this.getItemsCount()-1);
},
getFirstIndexOnPage: function() {
// Ensure that the firstIndexOnPage is really a page start.
// This may have become violated when getItemsPerPage has changed,
// (e.g. when switching between previewText and simple mode.)
this.firstIndexOnPage = Math.floor(this.firstIndexOnPage / this.getItemsPerPage()) * this.getItemsPerPage();
return this.firstIndexOnPage;
},
getLastIndexOnPage: function() {
return Math.min(this.getFirstIndexOnPage()+this.getItemsPerPage()-1, this.getItemsCount()-1);
},
onPageChanged: function(pageIndex,oldPageIndex) {
},
renderPage: function(itemRenderer) {
if (itemRenderer.beginRendering)
itemRenderer.beginRendering(this);
try {
// When there are items found add them to the result page (pagewise)
if (this.getItemsCount()) {
// Add the items of the current page
var lastIndex = this.getLastIndexOnPage();
var iInPage = -1;
for (var i=this.getFirstIndexOnPage(); i <= lastIndex; i++) {
iInPage++;
itemRenderer.render(this,this.items[i],i,iInPage);
}
}
} finally {
if (itemRenderer.endRendering)
itemRenderer.endRendering(this);
}
},
addPageNavigation: function(place) {
if (!this.getItemsCount()) return;
var self = this;
var onNaviButtonClick = function(e) {
if (!e) var e = window.event;
var pageIndex = abego.toInt(this.getAttribute("page"),0);
var oldPageIndex = self.getCurrentPageIndex();
if (pageIndex == oldPageIndex)
return;
var index = pageIndex * self.getItemsPerPage();
self.setFirstIndexOnPage(index);
self.onPageChanged(pageIndex,oldPageIndex);
};
var button;
var currentPageIndex = this.getCurrentPageIndex();
var lastPageIndex = this.getLastPageIndex();
if (currentPageIndex > 0) {
button = createTiddlyButton(place, "Previous", "Go to previous page (Shortcut: Alt-'<')", onNaviButtonClick, "prev");
button.setAttribute("page",(currentPageIndex-1).toString());
button.setAttribute("accessKey","<");
}
for (var i = -this.getMaxPagesInNavigation(); i < this.getMaxPagesInNavigation(); i++) {
var pageIndex = currentPageIndex+i;
if (pageIndex < 0) continue;
if (pageIndex > lastPageIndex) break;
var pageNo = (i+currentPageIndex+1).toString();
var buttonClass = pageIndex == currentPageIndex ? "currentPage" : "otherPage";
button = createTiddlyButton(place, pageNo, "Go to page %0".format([pageNo]), onNaviButtonClick, buttonClass);
button.setAttribute("page",(pageIndex).toString());
}
if (currentPageIndex < lastPageIndex) {
button = createTiddlyButton(place, "Next", "Go to next page (Shortcut: Alt-'>')", onNaviButtonClick, "next");
button.setAttribute("page",(currentPageIndex+1).toString());
button.setAttribute("accessKey",">");
}
}
});
// Class abego.LimitedTextRenderer ===========================================================
//
// Renders a given text, ensuring that a given limit of number of characters
// is not exceeded.
//
// A "markRegExp" may be specified. Substring matching this regular expression
// ("matched strings") are rendered with the class "marked".
//
// if the given text is longer than the limit the matched strings are preferred
// to be included in the rendered text (with some leading and trailing "context text").
//
// Example:
// var renderer = new abego.LimitedTextRenderer();
//
// var place = ... // a DOM element that should contain the rendered (limited) text
// var s = "This is another 'Hello World' example, as saying 'Hello' is always nice. So let's say it again: >Hello!<";
// var maxLen = 50;
// var markRE = /hello/gi;
// renderer.render(place,s,maxLen,markRE);
//
//#import abego.createEllipsis
//
abego.LimitedTextRenderer = function() {
var minMatchWithContextSize = 40;
var maxMovementForWordCorrection = 4; // When a "match" context starts or end on a word the context borders may be changed to at most this amount to include or exclude the word.
//----------------------------------------------------------------------------
//
// Ranges
//
// Objects with a "start" and "end" property (not a specific class).
//
// In a corresponding "Ranges array" these objects are sorted by their start
// and no Range object intersects/touches any other in the array.
//
//----------------------------------------------------------------------------
// Adds the Range [startIndex,endIndex[ to the ranges, ensuring that the Ranges
// in the array are sorted by their start and no Range object
// intersects/touches any other in the array (i.e. possibly the new Range is
// "merged" with existing ranges)
//
// @param ranges array of Range objects
//
var addRange = function(ranges, startIndex, endIndex) {
var n = ranges.length;
// When there are no ranges in ranges, just add it.
if (n == 0) {
ranges.push({start: startIndex, end: endIndex});
return;
}
var i = 0;
for (; i < n; i++) {
var range = ranges[i];
// find the first range that intersects or "touches" [startIndex, endIndex[
if (range.start <= endIndex && startIndex <= range.end) {
// Found.
var r;
// find the first range behind the new range that does not interfere
var rIndex = i+1;
for (; rIndex < n; rIndex++) {
r = ranges[rIndex];
if (r.start > endIndex || startIndex > range.end) {
break;
}
}
// Replace the ranges i to rIndex-1 with the union of the new range with these ranges.
var unionStart = startIndex;
var unionEnd = endIndex;
for (var j = i; j < rIndex; j++) {
r = ranges[j];
unionStart = Math.min(unionStart, r.start);
unionEnd = Math.max(unionEnd, r.end);
}
ranges.splice(i, rIndex-i, {start: unionStart, end: unionEnd});
return;
}
// if we found a range R that is right of the new range there is no
// intersection and we can insert the new range before R.
if (range.start > endIndex) {
break;
}
}
// When we are here the new range does not interfere with any range in ranges and
// i is the index of the first range right to it (or ranges.length, when the new range
// becomes the right most range).
ranges.splice(i, 0, {start: startIndex, end: endIndex});
};
// Returns the total size of all Ranges in ranges
//
var getTotalRangesSize = function(ranges) {
var totalRangeSize = 0;
for (var i=0; i < ranges.length; i++) {
var range = ranges[i];
totalRangeSize += range.end-range.start;
}
return totalRangeSize;
};
//----------------------------------------------------------------------------
var isWordChar = function(c) {
return (c >= "a" && c <= "z") || (c >= "A" && c <= "Z") || c == "_";
};
// Returns the bounds of the word in s around offset as a {start: , end:} object.
//
// Returns null when the char at offset is not a word char.
//
var getWordBounds = function(s, offset) {
// Handle the "offset is not in word" case
if (!isWordChar(s[offset])) return null;
for (var i = offset-1; i >= 0 && isWordChar(s[i]); i--)
{/*empty*/}
var startIndex = i+1;
var n = s.length;
for (i = offset+1; i < n && isWordChar(s[i]); i++)
{/*empty*/}
return {start: startIndex, end: i};
};
var moveToWordBorder = function(s, offset, isStartOffset) {
var wordBounds;
if (isStartOffset) {
wordBounds = getWordBounds(s, offset);
} else {
if (offset <= 0) return offset;
wordBounds = getWordBounds(s, offset-1);
}
if (!wordBounds) return offset;
if (isStartOffset) {
if (wordBounds.start >= offset-maxMovementForWordCorrection) return wordBounds.start;
if (wordBounds.end <= offset+maxMovementForWordCorrection) return wordBounds.end;
} else {
if (wordBounds.end <= offset+maxMovementForWordCorrection) return wordBounds.end;
if (wordBounds.start >= offset-maxMovementForWordCorrection) return wordBounds.start;
}
return offset;
};
// Splits s into a sequence of "matched" and "unmatched" substrings, using the
// matchRegExp to do the matching.
//
// Returns an array of objects with a "text" property containing the substring text.
// Substrings that are "matches" also contain a boolean "isMatch" property set to true.
//
// @param matchRegExp [may be null] when null no matching is performed and the returned
// array just contains one item with s as its text
//
var getTextAndMatchArray = function(s, matchRegExp) {
var result = [];
if (matchRegExp) {
var startIndex = 0;
var n = s.length;
var currentLen = 0;
do {
matchRegExp.lastIndex = startIndex;
var match = matchRegExp.exec(s);
if (match) {
if (startIndex < match.index) {
var t = s.substring(startIndex, match.index);
result.push({text:t});
}
result.push({text:match[0], isMatch:true});
startIndex = match.index + match[0].length;
} else {
result.push({text: s.substr(startIndex)});
break;
}
} while (true);
} else {
result.push({text: s});
}
return result;
};
var getMatchedTextCount = function(textAndMatches) {
var result = 0;
for (var i=0; i < textAndMatches.length; i++) {
if (textAndMatches[i].isMatch) {
result++;
}
}
return result;
};
var getContextRangeAround = function(s, startIndex, endIndex, matchCount, maxLen) {
// Partition the available space into equal sized areas for each match and one
// for the text start.
// But the size should not go below a certain limit
var size = Math.max(Math.floor(maxLen/(matchCount+1)), minMatchWithContextSize);
// Substract the size of the range to get the size of the context.
var contextSize = Math.max(size-(endIndex-startIndex), 0);
// Two thirds of the context should be before the match, one third after.
var contextEnd = Math.min(Math.floor(endIndex+contextSize/3), s.length);
var contextStart = Math.max(contextEnd - size, 0);
// If the contextStart/End is inside a word and the end of the word is
// close move the pointers accordingly to make the text more readable.
contextStart = moveToWordBorder(s, contextStart, true);
contextEnd = moveToWordBorder(s, contextEnd, false);
return {start: contextStart, end: contextEnd};
};
// Get all ranges around matched substrings with their contexts
//
var getMatchedTextWithContextRanges = function(textAndMatches, s, maxLen) {
var ranges = [];
var matchCount = getMatchedTextCount(textAndMatches);
var pos = 0;
for (var i=0; i < textAndMatches.length; i++) {
var t = textAndMatches[i];
var text = t.text;
if (t.isMatch) {
var range = getContextRangeAround(s, pos, pos+text.length, matchCount, maxLen);
addRange(ranges, range.start, range.end);
}
pos += text.length;
}
return ranges;
};
var fillUpRanges = function(s, ranges, maxLen) {
var remainingLen = maxLen - getTotalRangesSize(ranges);
while (remainingLen > 0) {
if (ranges.length == 0) {
// No matches added yet. Make one large range.
addRange(ranges, 0, moveToWordBorder(s, maxLen, false));
return;
} else {
var range = ranges[0];
var startIndex;
var maxEndIndex;
if (range.start == 0) {
// The first range already starts at the beginning of the string.
// When there is a second range fill to the next range start or to the maxLen.
startIndex = range.end;
if (ranges.length > 1) {
maxEndIndex = ranges[1].start;
} else {
// Only one range. Add a range after that with the complete remaining len
// (corrected to "beautify" the output)
addRange(ranges, startIndex, moveToWordBorder(s, startIndex+remainingLen, false));
return;
}
} else {
// There is unused space between the start of the text and the first range.
startIndex = 0;
maxEndIndex = range.start;
}
var endIndex = Math.min(maxEndIndex, startIndex+remainingLen);
addRange(ranges, startIndex, endIndex);
remainingLen -= (endIndex-startIndex);
}
}
};
// Write the given ranges of s, using textAndMatches for marking portions of the text.
//
var writeRanges = function(place, s, textAndMatches, ranges, maxLen) {
if (ranges.length == 0) return;
// Processes the text between startIndex and endIndex of the textAndMatches
// "writes" them (as DOM elements) at the given place, possibly as "marked" text.
//
// When endIndex is not the end of the full text an ellisis is appended.
//
var writeTextAndMatchRange = function(place, s, textAndMatches, startIndex, endIndex) {
var t;
var text;
// find the first text item to write
var pos = 0;
var i = 0;
var offset = 0;
for (;i < textAndMatches.length; i++) {
t = textAndMatches[i];
text = t.text;
if (startIndex < pos+text.length) {
offset = startIndex - pos;
break;
}
pos += text.length;
}
var remainingLen = endIndex - startIndex;
for (; i < textAndMatches.length && remainingLen > 0; i++) {
t = textAndMatches[i];
text = t.text.substr(offset);
offset = 0;
if (text.length > remainingLen) text = text.substr(0,remainingLen);
if (t.isMatch) {
createTiddlyElement(place,"span",null,"marked",text);
} else {
createTiddlyText(place, text);
}
remainingLen -= text.length;
}
if (endIndex < s.length) {
abego.createEllipsis(place);
}
};
// When the first range is not at the start of the text write an ellipsis("...")
// (Ellipses between ranges are written in the writeTextAndMatchRange method)
if (ranges[0].start > 0) abego.createEllipsis(place);
var remainingLen = maxLen;
for (var i = 0; i < ranges.length && remainingLen > 0; i++) {
var range = ranges[i];
var len = Math.min(range.end - range.start, remainingLen);
writeTextAndMatchRange(place, s, textAndMatches, range.start, range.start+len);
remainingLen -= len;
}
};
this.render = function(place,s,maxLen,markRegExp) {
if (s.length < maxLen) maxLen = s.length;
var textAndMatches = getTextAndMatchArray(s, markRegExp);
var ranges = getMatchedTextWithContextRanges(textAndMatches, s, maxLen);
// When the maxLen is not yet reached add more ranges
// starting from the beginning until either maxLen or
// the end of the string is reached.
fillUpRanges(s, ranges, maxLen);
writeRanges(place, s, textAndMatches, ranges, maxLen);
};
};
(function() {
function alertAndThrow(msg) {
alert(msg);
throw msg;
};
if (version.major < 2 || (version.major == 2 && version.minor < 1))
alertAndThrow("YourSearchPlugin requires TiddlyWiki 2.1 or newer.\n\nCheck the archive for YourSearch plugins\nsupporting older versions of TiddlyWiki.\n\nArchive: http://tiddlywiki.abego-software.de/archive");
abego.YourSearch = {};
//----------------------------------------------------------------------------
// The Search Core
//----------------------------------------------------------------------------
// Model Variables
var lastResults; // Array of tiddlers that matched the last search
var lastQuery; // The last Search query (TiddlerQuery)
var setLastResults = function(array) {
lastResults = array;
};
var getLastResults = function() {
return lastResults ? lastResults : [];
};
var getLastResultsCount = function() {
return lastResults ? lastResults.length : 0;
};
// Standard Ranking Weights
var matchInTitleWeight = 4;
var precisionInTitleWeight = 10;
var matchInTagsWeight = 2;
var getMatchCount = function(s, re) {
var m = s.match(re);
return m ? m.length : 0;
};
var standardRankFunction = function(tiddler, query) {
// Count the matches in the title and the tags
var markRE = query.getMarkRegExp();
if (!markRE) return 1;
var matchesInTitle = tiddler.title.match(markRE);
var nMatchesInTitle = matchesInTitle ? matchesInTitle.length : 0;
var nMatchesInTags = getMatchCount(tiddler.getTags(), markRE);
// Calculate the "precision" of the matches in the title as the ratio of
// the length of the matches to the total length of the title.
var lengthOfMatchesInTitle = matchesInTitle ? matchesInTitle.join("").length : 0;
var precisionInTitle = tiddler.title.length > 0 ? lengthOfMatchesInTitle/tiddler.title.length : 0;
// calculate a weighted score
var rank= nMatchesInTitle * matchInTitleWeight
+ nMatchesInTags * matchInTagsWeight
+ precisionInTitle * precisionInTitleWeight
+ 1;
return rank;
};
// @return Tiddler[]
//
var findMatches = function(store, searchText,caseSensitive,useRegExp,sortField,excludeTag) {
lastQuery = null;
var candidates = store.reverseLookup("tags",excludeTag,false);
try {
var defaultFields = [];
if (config.options.chkSearchInTitle) defaultFields.push("title");
if (config.options.chkSearchInText) defaultFields.push("text");
if (config.options.chkSearchInTags) defaultFields.push("tags");
lastQuery = new abego.TiddlerQuery(
searchText,caseSensitive, useRegExp,defaultFields,config.options.chkSearchExtendedFields);
} catch (e) {
// when an invalid query is given no tiddlers are matched
return [];
}
var results = lastQuery.filter(candidates);
// Rank the results
var rankFunction = abego.YourSearch.getRankFunction();
for (var i = 0; i < results.length; i++) {
var tiddler = results[i];
var rank = rankFunction(tiddler, lastQuery);
// Add the rank information to the tiddler.
// This is used during the sorting, but it may also
// be used in the result, e.g. to display some "relevance"
// information in the result
tiddler.searchRank = rank;
}
// sort the result, taking care of the rank and the sortField
if(!sortField) {
sortField = "title";
}
var sortFunction = function (a,b) {
var searchRankDiff = a.searchRank - b.searchRank;
if (searchRankDiff == 0) {
if (a[sortField] == b[sortField]) {
return(0);
} else {
return (a[sortField] < b[sortField]) ? -1 : +1;
}
} else {
return (searchRankDiff > 0) ? -1 : +1;
}
};
results.sort(sortFunction);
return results;
};
//----------------------------------------------------------------------------
// The Search UI (Result page)
//----------------------------------------------------------------------------
// Visual appearance of the result page
var maxCharsInTitle = 80;
var maxCharsInTags = 50;
var maxCharsInText = 250;
var maxCharsInField = 50;
var itemsPerPageDefault = 25; // Default maximum number of items on one search result page
var itemsPerPageWithPreviewDefault = 10; // Default maximum number of items on one search result page when PreviewText is on
// DOM IDs
var yourSearchResultID = "yourSearchResult";
var yourSearchResultItemsID = "yourSearchResultItems";
var lastSearchText; // The last search text, as passed to findMatches
var resultElement; // The (popup) DOM element containing the search result [may be null]
var searchInputField; // The "search" input field
var searchButton; // The "search" button
var lastNewTiddlerButton;
var initStylesheet = function() {
if (version.extensions.YourSearchPlugin.styleSheetInited)
return;
version.extensions.YourSearchPlugin.styleSheetInited = true;
setStylesheet(store.getTiddlerText("YourSearchStyleSheet"),"yourSearch");
}
var isResultOpen = function() {
return resultElement != null && resultElement.parentNode == document.body;
};
var closeResult = function() {
if (isResultOpen()) {
document.body.removeChild(resultElement);
}
};
// Closes the Search Result window and displays the tiddler
// defined by the "tiddlyLink" attribute of this element
//
var closeResultAndDisplayTiddler = function(e)
{
closeResult();
var title = this.getAttribute("tiddlyLink");
if(title) {
var withHilite = this.getAttribute("withHilite");
var oldHighlightHack = highlightHack;
if (withHilite && withHilite=="true" && lastQuery) {
highlightHack = lastQuery.getMarkRegExp();
}
story.displayTiddler(this,title);
highlightHack = oldHighlightHack;
}
return(false);
};
// Adjusts the resultElement's size and position, relative to the search input field.
//
var adjustResultPositionAndSize = function() {
if (!searchInputField) return;
var root = searchInputField;
// Position the result below the root and resize it if necessary.
var rootLeft = findPosX(root);
var rootTop = findPosY(root);
var rootHeight = root.offsetHeight;
var popupLeft = rootLeft;
var popupTop = rootTop + rootHeight;
// Make sure the result is not wider than the window
var winWidth = findWindowWidth();
if (winWidth < resultElement.offsetWidth) {
resultElement.style.width = (winWidth - 100)+"px";
winWidth = findWindowWidth();
}
// Ensure that the left and right of the result are not
// clipped by the window. Move it to the left or right, if necessary.
var popupWidth = resultElement.offsetWidth;
if(popupLeft + popupWidth > winWidth)
popupLeft = winWidth - popupWidth-30;
if (popupLeft < 0) popupLeft = 0;
// Do the actual moving
resultElement.style.left = popupLeft + "px";
resultElement.style.top = popupTop + "px";
resultElement.style.display = "block";
};
var scrollVisible = function() {
// Scroll the window to make the result page (and the search Input field) visible.
if (resultElement) window.scrollTo(0,ensureVisible(resultElement));
if (searchInputField) window.scrollTo(0,ensureVisible(searchInputField));
};
// Makes sure the result page has a good size and position and visible
// (may scroll the window)
//
var ensureResultIsDisplayedNicely = function() {
adjustResultPositionAndSize();
scrollVisible();
};
var indexInPage; // The index (in the current page) of the tiddler currently rendered.
var currentTiddler; // While rendering the page the tiddler that is currently rendered.
var pager = new abego.PageWiseRenderer();
var MyItemRenderer = function(parent) {
// Load the template how to display the items that represent a found tiddler
this.itemHtml = store.getTiddlerText("YourSearchItemTemplate");
if (!this.itemHtml) alertAndThrow("YourSearchItemTemplate not found");
// Locate the node that shall contain the list of found tiddlers
this.place = document.getElementById(yourSearchResultItemsID);
if(!this.place)
this.place = createTiddlyElement(parent,"div",yourSearchResultItemsID);
};
merge(MyItemRenderer.prototype,{
render: function(pager,object,index,indexOnPage) {
// Define global variables, referenced by macros during applyHtmlMacros
indexInPage = indexOnPage;
currentTiddler = object;
var item = createTiddlyElement(this.place,"div",null, "yourSearchItem");
item.innerHTML = this.itemHtml;
applyHtmlMacros(item,null);
refreshElements(item,null);
},
endRendering: function(pager) {
// The currentTiddler must only be defined while rendering the found tiddlers
currentTiddler = null;
}
});
// Refreshes the content of the result with the current search result
// of the selected page.
//
// Assumes that the result is already open.
//
var refreshResult = function() {
if (!resultElement || !searchInputField) return;
// Load the template for the YourSearchResult
var html = store.getTiddlerText("YourSearchResultTemplate");
if (!html) html = "<b>Tiddler YourSearchResultTemplate not found</b>";
resultElement.innerHTML = html;
// Expand the template macros etc.
applyHtmlMacros(resultElement,null);
refreshElements(resultElement,null);
var itemRenderer = new MyItemRenderer(resultElement);
pager.renderPage(itemRenderer);
ensureResultIsDisplayedNicely();
};
pager.getItemsPerPage = function() {
var n = (config.options.chkPreviewText)
? abego.toInt(config.options.txtItemsPerPageWithPreview, itemsPerPageWithPreviewDefault)
: abego.toInt(config.options.txtItemsPerPage, itemsPerPageDefault);
return (n > 0) ? n : 1;
};
pager.onPageChanged = function() {
refreshResult();
};
var showResult = function() {
if (!resultElement) {
resultElement = createTiddlyElement(document.body,"div",yourSearchResultID,"yourSearchResult");
} else if (resultElement.parentNode != document.body) {
document.body.appendChild(resultElement);
}
refreshResult();
};
var reopenResultIfApplicable = function() {
if (searchInputField == null || !config.options.chkUseYourSearch) return;
if ((searchInputField.value == lastSearchText) && lastSearchText && !isResultOpen()) {
// For speedup we check re-use the previously created resultElement, if possible.
if (resultElement && (resultElement.parentNode != document.body)) {
document.body.appendChild(resultElement);
ensureResultIsDisplayedNicely();
} else {
showResult();
}
}
};
var invalidateResult = function() {
closeResult();
resultElement = null;
lastSearchText = null;
};
//-------------------------------------------------------------------------
// Close the search result page when the user clicks on the document
// (and not into the searchInputField, on the search button or in the result)
// or presses the ESC key
// Returns true if e is either self or a descendant (child, grandchild,...) of self.
//
// @param self DOM:Element
// @param e DOM:Element or null
//
var isDescendantOrSelf = function(self, e) {
while (e != null) {
if (self == e) return true;
e = e.parentNode;
}
return false;
};
var onDocumentClick = function(e) {
if (e.target == searchInputField) return;
if (e.target == searchButton) return;
if (resultElement && isDescendantOrSelf(resultElement, e.target)) return;
closeResult();
};
var onDocumentKeyup = function(e) {
// Close the search result page when the user presses "ESC"
if (e.keyCode == 27) closeResult();
};
addEvent(document,"click",onDocumentClick);
addEvent(document,"keyup",onDocumentKeyup);
// Our Search Macro Hijack Function ==========================================
// Helper
var myStorySearch = function(text,useCaseSensitive,useRegExp)
{
lastSearchText = text;
setLastResults(findMatches(store, text,useCaseSensitive,useRegExp,"title","excludeSearch"));
highlightHack = lastQuery ? lastQuery.getMarkRegExp() : null;
pager.setItems(getLastResults());
showResult();
highlightHack = null;
};
var myMacroSearchHandler = function(place,macroName,params,wikifier,paramString,tiddler)
{
initStylesheet();
lastSearchText = "";
var searchTimeout = null;
var doSearch = function(txt)
{
if (config.options.chkUseYourSearch)
myStorySearch(txt.value,config.options.chkCaseSensitiveSearch,config.options.chkRegExpSearch);
else
story.search(txt.value,config.options.chkCaseSensitiveSearch,config.options.chkRegExpSearch);
lastSearchText = txt.value;
};
var clickHandler = function(e)
{
doSearch(searchInputField);
return false;
};
var keyHandler = function(e)
{
if (!e) var e = window.event;
searchInputField = this;
switch(e.keyCode)
{
case 13:
if (e.ctrlKey && lastNewTiddlerButton && isResultOpen())
lastNewTiddlerButton.onclick.apply(lastNewTiddlerButton,[e]);
else
doSearch(this);
break;
case 27:
// When the result is open, close it,
// otherwise clear the content of the input field
if (isResultOpen()) {
closeResult();
} else {
this.value = "";
clearMessage();
}
break;
}
if (String.fromCharCode(e.keyCode) == this.accessKey || e.altKey)
{
reopenResultIfApplicable();
}
if(this.value.length<3 && searchTimeout) clearTimeout(searchTimeout);
if(this.value.length > 2)
{
if (this.value != lastSearchText)
{
if (!config.options.chkUseYourSearch || config.options.chkSearchAsYouType)
{
if(searchTimeout)
clearTimeout(searchTimeout);
var txt = this;
searchTimeout = setTimeout(function() {doSearch(txt);},500);
}
}
else
{
if(searchTimeout)
clearTimeout(searchTimeout);
}
};
if (this.value.length == 0)
{
closeResult();
}
};
var focusHandler = function(e)
{
this.select();
clearMessage();
reopenResultIfApplicable();
};
var args = paramString.parseParams("list",null,true);
var buttonAtRight = getFlag(args, "buttonAtRight");
var sizeTextbox = getParam(args, "sizeTextbox", this.sizeTextbox);
var btn;
if (!buttonAtRight)
btn = createTiddlyButton(place,this.label,this.prompt,clickHandler);
var txt = createTiddlyElement(place,"input",null,null,null);
if(params[0])
txt.value = params[0];
txt.onkeyup = keyHandler;
txt.onfocus = focusHandler;
txt.setAttribute("size",sizeTextbox);
txt.setAttribute("accessKey",this.accessKey);
txt.setAttribute("autocomplete","off");
if(config.browser.isSafari)
{
txt.setAttribute("type","search");
txt.setAttribute("results","5");
}
else
txt.setAttribute("type","text");
if (buttonAtRight)
btn = createTiddlyButton(place,this.label,this.prompt,clickHandler);
searchInputField = txt;
searchButton = btn;
};
//----------------------------------------------------------------------------
// Support for Macros
//----------------------------------------------------------------------------
var openAllFoundTiddlers = function() {
closeResult();
var results = getLastResults();
var n = results.length;
if (n) {
var titles=[];
for(var i = 0; i<n; i++)
titles.push(results[i].title);
story.displayTiddlers(null,titles);
}
};
var createOptionWithRefresh = function(place, optionParams, wikifier,tiddler) {
invokeMacro(place,"option",optionParams,wikifier,tiddler);
// The option macro appended the component at the end of the place.
var elem = place.lastChild;
var oldOnClick = elem.onclick;
elem.onclick = function(e) {
var result = oldOnClick.apply(this, arguments);
refreshResult();
return result;
};
return elem;
};
var removeTextDecoration = function(s) {
var removeThis = ["''", "{{{", "}}}", "//", "<<<", "/***", "***/"];
var reText = "";
for (var i = 0; i < removeThis.length; i++) {
if (i != 0) reText += "|";
reText += "("+removeThis[i].escapeRegExp()+")";
}
return s.replace(new RegExp(reText, "mg"), "").trim();
};
// Returns the "shortcut number" of the currentTiddler.
// I.e. When the user presses Alt-n the given tiddler is opened/display.
//
// @return 0-9 or -1 when no number is defined
//
var getShortCutNumber = function() {
var i = indexInPage;
return (i >= 0 && i <= 9)
? (i < 9 ? (i+1) : 0)
: -1;
};
var limitedTextRenderer = new abego.LimitedTextRenderer();
var renderLimitedText = function(place, s, maxLen) {
limitedTextRenderer.render(place,s,maxLen,lastQuery.getMarkRegExp())
}
// When any tiddler are changed reset the result.
//
var oldTiddlyWikiSaveTiddler = TiddlyWiki.prototype.saveTiddler;
TiddlyWiki.prototype.saveTiddler = function(title,newTitle,newBody,modifier,modified,tags,fields) {
oldTiddlyWikiSaveTiddler.apply(this, arguments);
invalidateResult();
};
var oldTiddlyWikiRemoveTiddler = TiddlyWiki.prototype.removeTiddler;
TiddlyWiki.prototype.removeTiddler = function(title) {
oldTiddlyWikiRemoveTiddler.apply(this, arguments);
invalidateResult();
};
//----------------------------------------------------------------------------
// Macros
//----------------------------------------------------------------------------
// ====Macro yourSearch ================================================
config.macros.yourSearch = {
// Standard Properties
label: "yourSearch",
prompt: "Gives access to the current/last YourSearch result",
handler: function(place,macroName,params,wikifier,paramString,tiddler) {
if (params.length == 0) return;
var name = params[0];
var func = config.macros.yourSearch.funcs[name];
if (func) func(place,macroName,params,wikifier,paramString,tiddler);
},
tests: {
"true" : function() {return true;},
"false" : function() {return false;},
"found" : function() {return getLastResultsCount() > 0;},
"previewText" : function() {return config.options.chkPreviewText;}
},
funcs: {
itemRange: function(place) {
if (getLastResultsCount()) {
var lastIndex = pager.getLastIndexOnPage();
var s = "%0 - %1".format([pager.getFirstIndexOnPage()+1,lastIndex+1]);
createTiddlyText(place, s);
}
},
count: function(place) {
createTiddlyText(place, getLastResultsCount().toString());
},
query: function(place) {
if (lastQuery) {
createTiddlyText(place, lastQuery.toString());
}
},
version: function(place) {
var t = "YourSearch %0.%1.%2".format(
[version.extensions.YourSearchPlugin.major,
version.extensions.YourSearchPlugin.minor,
version.extensions.YourSearchPlugin.revision]);
var e = createTiddlyElement(place, "a");
e.setAttribute("href", "http://tiddlywiki.abego-software.de/#YourSearchPlugin");
e.innerHTML = '<font color="black" face="Arial, Helvetica, sans-serif">'+t+'<font>';
},
copyright: function(place) {
var e = createTiddlyElement(place, "a");
e.setAttribute("href", "http://www.abego-software.de");
e.innerHTML = '<font color="black" face="Arial, Helvetica, sans-serif">© 2005-2006 <b><font color="red">abego</font></b> Software<font>';
},
newTiddlerButton: function(place) {
if (lastQuery) {
var r = abego.parseNewTiddlerCommandLine(lastQuery.getQueryText());
var btn = config.macros.newTiddler.createNewTiddlerButton(place,r.title,r.params,"new tiddler","Create a new tiddler based on search text. (Shortcut: Ctrl-Enter; Separators: '.', '#')",null,"text");
// Close the result before the new tiddler is created.
var oldOnClick = btn.onclick;
btn.onclick = function() {
closeResult();
oldOnClick.apply(this,arguments);
}
lastNewTiddlerButton = btn;
}
},
linkButton: function(place,macroName,params,wikifier,paramString,tiddler) {
if (params < 2) return;
var tiddlyLink = params[1];
var text = params < 3 ? tiddlyLink : params[2];
var tooltip = params < 4 ? text : params[3];
var accessKey = params < 5 ? null : params[4];
var btn = createTiddlyButton(place,text,tooltip,closeResultAndDisplayTiddler,null,null, accessKey);
btn.setAttribute("tiddlyLink",tiddlyLink);
},
closeButton: function(place,macroName,params,wikifier,paramString,tiddler) {
var button = createTiddlyButton(place, "close", "Close the Search Results (Shortcut: ESC)", closeResult);
},
openAllButton: function(place,macroName,params,wikifier,paramString,tiddler) {
var n = getLastResultsCount();
if (n == 0) return;
var title = n == 1 ? "open tiddler" : "open all %0 tiddlers".format([n]);
var button = createTiddlyButton(place, title, "Open all found tiddlers (Shortcut: Alt-O)", openAllFoundTiddlers);
button.setAttribute("accessKey","O");
},
naviBar: function(place,macroName,params,wikifier,paramString,tiddler) {
pager.addPageNavigation(place);
},
"if": function(place,macroName,params,wikifier,paramString,tiddler) {
if (params.length < 2) return;
var testName = params[1];
var negate = (testName == "not");
if (negate) {
if (params.length < 3) return;
testName = params[2];
}
var test = config.macros.yourSearch.tests[testName];
var showIt = false;
try {
if (test) {
showIt = test(place,macroName,params,wikifier,paramString,tiddler) != negate;
} else {
// When no predefined test is specified try to evaluate it as a JavaScript expression.
showIt = (!eval(testName)) == negate;
}
} catch (ex) {
}
if (!showIt) {
place.style.display="none";
}
},
chkPreviewText: function(place,macroName,params,wikifier,paramString,tiddler) {
var optionParams = params.slice(1).join(" ");
var elem = createOptionWithRefresh(place, "chkPreviewText", wikifier,tiddler);
elem.setAttribute("accessKey", "P");
elem.title = "Show text preview of found tiddlers (Shortcut: Alt-P)";
return elem;
}
}
};
// ====Macro foundTiddler ================================================
config.macros.foundTiddler = {
// Standard Properties
label: "foundTiddler",
prompt: "Provides information on the tiddler currently processed on the YourSearch result page",
handler: function(place,macroName,params,wikifier,paramString,tiddler) {
var name = params[0];
var func = config.macros.foundTiddler.funcs[name];
if (func) func(place,macroName,params,wikifier,paramString,tiddler);
},
funcs: {
title: function(place,macroName,params,wikifier,paramString,tiddler) {
if (!currentTiddler) return;
var shortcutNumber = getShortCutNumber();
var tooltip = shortcutNumber >= 0
? "Open tiddler (Shortcut: Alt-%0)".format([shortcutNumber.toString()])
: "Open tiddler";
var btn = createTiddlyButton(place,null,tooltip,closeResultAndDisplayTiddler,null);
btn.setAttribute("tiddlyLink",currentTiddler.title);
btn.setAttribute("withHilite","true");
renderLimitedText(btn, currentTiddler.title, maxCharsInTitle);
if (shortcutNumber >= 0) {
btn.setAttribute("accessKey",shortcutNumber.toString());
}
},
tags: function(place,macroName,params,wikifier,paramString,tiddler) {
if (!currentTiddler) return;
renderLimitedText(place, currentTiddler.getTags(), maxCharsInTags);
},
text: function(place,macroName,params,wikifier,paramString,tiddler) {
if (!currentTiddler) return;
renderLimitedText(place, removeTextDecoration(currentTiddler.text), maxCharsInText);
},
field: function(place,macroName,params,wikifier,paramString,tiddler) {
if (!currentTiddler) return;
var name = params[1];
var len = params.length > 2 ? abego.toInt(params[2],maxCharsInField) : maxCharsInField;
var v = store.getValue(currentTiddler,name);
if (v)
renderLimitedText(place, removeTextDecoration(v), len);
},
// Renders the "shortcut number" of the current tiddler, to indicate to the user
// what number to "Alt-press" to open the tiddler.
//
number: function(place,macroName,params,wikifier,paramString,tiddler) {
var numberToDisplay = getShortCutNumber();
if (numberToDisplay >= 0) {
var text = "%0)".format([numberToDisplay.toString()]);
createTiddlyElement(place,"span",null,"shortcutNumber",text);
}
}
}
};
//----------------------------------------------------------------------------
// Configuration Stuff
//----------------------------------------------------------------------------
var opts = {chkUseYourSearch:true,
chkPreviewText:true,
chkSearchAsYouType:true,
chkSearchInTitle:true,
chkSearchInText:true,
chkSearchInTags:true,
chkSearchExtendedFields:true,
txtItemsPerPage:itemsPerPageDefault,
txtItemsPerPageWithPreview:itemsPerPageWithPreviewDefault};
for (var n in opts)
if (config.options[n] == undefined) config.options[n] = opts[n];
//----------------------------------------------------------------------------
// Shadow Tiddlers
//----------------------------------------------------------------------------
config.shadowTiddlers.AdvancedOptions += "\n<<option chkUseYourSearch>> Use 'Your Search' //([[more options|YourSearch Options]]) ([[help|YourSearch Help]])// ";
config.shadowTiddlers["YourSearch Help"] =
"!Field Search\nWith the Field Search you can restrict your search to certain fields of a tiddler, e.g"+
" only search the tags or only the titles. The general form is //fieldname//'':''//textToSearch// (e."+
"g. {{{title:intro}}}). In addition one-character shortcuts are also supported for the standard field"+
"s {{{title}}}, {{{text}}} and {{{tags}}}:\n|!What you want|!What you type|!Example|\n|Search ''titles "+
"only''|start word with ''!''|{{{!jonny}}} (shortcut for {{{title:jonny}}})|\n|Search ''contents/text "+
"only''|start word with ''%''|{{{%football}}} (shortcut for {{{text:football}}})|\n|Search ''tags only"+
"''|start word with ''#''|{{{#Plugin}}} (shortcut for {{{tags:Plugin}}})|\n\nUsing this feature you may"+
" also search the extended fields (\"Metadata\") introduced with TiddlyWiki 2.1, e.g. use {{{priority:1"+
"}}} to find all tiddlers with the priority field set to \"1\".\n\nYou may search a word in more than one"+
" field. E.g. {{{!#Plugin}}} (or {{{title:tags:Plugin}}} in the \"long form\") finds tiddlers containin"+
"g \"Plugin\" either in the title or in the tags (but does not look for \"Plugin\" in the text). \n\n!Boole"+
"an Search\nThe Boolean Search is useful when searching for multiple words.\n|!What you want|!What you "+
"type|!Example|\n|''All words'' must exist|List of words|{{{jonny jeremy}}} (or {{{jonny and jeremy}}}"+
")|\n|''At least one word'' must exist|Separate words by ''or''|{{{jonny or jeremy}}}|\n|A word ''must "+
"not exist''|Start word with ''-''|{{{-jonny}}} (or {{{not jonny}}})|\n\n''Note:'' When you specify two"+
" words, separated with a space, YourSearch finds all tiddlers that contain both words, but not neces"+
"sarily next to each other. If you want to find a sequence of word, e.g. '{{{John Brown}}}', you need"+
" to put the words into quotes. I.e. you type: {{{\"john brown\"}}}.\n\nUsing parenthesis you may change "+
"the default \"left to right\" evaluation of the boolean search. E.g. {{{not (jonny or jeremy)}}} finds"+
" all tiddlers that contain neither \"jonny\" nor \"jeremy. In contrast to this {{{not jonny or jeremy}}"+
"} (i.e. without parenthesis) finds all tiddlers that either don't contain \"jonny\" or that contain \"j"+
"eremy\".\n\n!'Exact Word' Search\nBy default a search result all matches that 'contain' the searched tex"+
"t. E.g. if you search for {{{Task}}} you will get all tiddlers containing 'Task', but also '~Complet"+
"edTask', '~TaskForce' etc.\n\nIf you only want to get the tiddlers that contain 'exactly the word' you"+
" need to prefix it with a '='. E.g. typing '=Task' will find the tiddlers that contain the word 'Tas"+
"k', ignoring words that just contain 'Task' as a substring.\n\n!~CaseSensitiveSearch and ~RegExpSearch"+
"\nThe standard search options ~CaseSensitiveSearch and ~RegExpSearch are fully supported by YourSearc"+
"h. However when ''~RegExpSearch'' is on Filtered and Boolean Search are disabled.\n\nIn addition you m"+
"ay do a \"regular expression\" search even with the ''~RegExpSearch'' set to false by directly enterin"+
"g the regular expression into the search field, framed with {{{/.../}}}. \n\nExample: {{{/m[ae][iy]er/"+
"}}} will find all tiddlers that contain either \"maier\", \"mayer\", \"meier\" or \"meyer\".\n\n!~JavaScript E"+
"xpression Filtering\nIf you are familiar with JavaScript programming and know some TiddlyWiki interna"+
"ls you may also use JavaScript expression for the search. Just enter a JavaScript boolean expression"+
" into the search field, framed with {{{ { ... } }}}. In the code refer to the variable tiddler and e"+
"valuate to {{{true}}} when the given tiddler should be included in the result. \n\nExample: {{{ { tidd"+
"ler.modified > new Date(\"Jul 4, 2005\")} }}} returns all tiddler modified after July 4th, 2005.\n\n!Com"+
"bined Search\nYou are free to combine the various search options. \n\n''Examples''\n|!What you type|!Res"+
"ult|\n|{{{!jonny !jeremy -%football}}}|all tiddlers with both {{{jonny}}} and {{{jeremy}}} in its tit"+
"les, but no {{{football}}} in content.|\n|{{{#=Task}}}|All tiddlers tagged with 'Task' (the exact wor"+
"d). Tags named '~CompletedTask', '~TaskForce' etc. are not considered.|\n\n!Access Keys\nYou are encour"+
"aged to use the access keys (also called \"shortcut\" keys) for the most frequently used operations. F"+
"or quick reference these shortcuts are also mentioned in the tooltip for the various buttons etc.\n\n|"+
"!Key|!Operation|\n|{{{Alt-F}}}|''The most important keystroke'': It moves the cursor to the search in"+
"put field so you can directly start typing your query. Pressing {{{Alt-F}}} will also display the pr"+
"evious search result. This way you can quickly display multiple tiddlers using \"Press {{{Alt-F}}}. S"+
"elect tiddler.\" sequences.|\n|{{{ESC}}}|Closes the [[YourSearch Result]]. When the [[YourSearch Resul"+
"t]] is already closed and the cursor is in the search input field the field's content is cleared so "+
"you start a new query.|\n|{{{Alt-1}}}, {{{Alt-2}}},... |Pressing these keys opens the first, second e"+
"tc. tiddler from the result list.|\n|{{{Alt-O}}}|Opens all found tiddlers.|\n|{{{Alt-P}}}|Toggles the "+
"'Preview Text' mode.|\n|{{{Alt-'<'}}}, {{{Alt-'>'}}}|Displays the previous or next page in the [[Your"+
"Search Result]].|\n|{{{Return}}}|When you have turned off the 'as you type' search mode pressing the "+
"{{{Return}}} key actually starts the search (as does pressing the 'search' button).|\n\n//If some of t"+
"hese shortcuts don't work for you check your browser if you have other extensions installed that alr"+
"eady \"use\" these shortcuts.//";
config.shadowTiddlers["YourSearch Options"] =
"|>|!YourSearch Options|\n|>|<<option chkUseYourSearch>> Use 'Your Search'|\n|!|<<option chkPreviewText"+
">> Show Text Preview|\n|!|<<option chkSearchAsYouType>> 'Search As You Type' Mode (No RETURN required"+
" to start search)|\n|!|Default Search Filter:<<option chkSearchInTitle>>Title ('!') <<option chk"+
"SearchInText>>Text ('%') <<option chkSearchInTags>>Tags ('#') <<option chkSearchExtendedFiel"+
"ds>>Extended Fields<html><br><font size=\"-2\">The fields of a tiddlers that are searched when you don"+
"'t explicitly specify a filter in the search text <br>(Explictly specify fields using one or more '!"+
"', '%', '#' or 'fieldname:' prefix before the word/text to find).</font></html>|\n|!|Number of items "+
"on search result page: <<option txtItemsPerPage>>|\n|!|Number of items on search result page with pre"+
"view text: <<option txtItemsPerPageWithPreview>>|\n";
config.shadowTiddlers["YourSearchStyleSheet"] =
"/***\n!~YourSearchResult Stylesheet\n***/\n/*{{{*/\n.yourSearchResult {\n\tposition: absolute;\n\twidth: 800"+
"px;\n\n\tpadding: 0.2em;\n\tlist-style: none;\n\tmargin: 0;\n\n\tbackground: #ffd;\n\tborder: 1px solid DarkGra"+
"y;\n}\n\n/*}}}*/\n/***\n!!Summary Section\n***/\n/*{{{*/\n.yourSearchResult .summary {\n\tborder-bottom-width:"+
" thin;\n\tborder-bottom-style: solid;\n\tborder-bottom-color: #999999;\n\tpadding-bottom: 4px;\n}\n\n.yourSea"+
"rchRange, .yourSearchCount, .yourSearchQuery {\n\tfont-weight: bold;\n}\n\n.yourSearchResult .summary ."+
"button {\n\tfont-size: 10px;\n\n\tpadding-left: 0.3em;\n\tpadding-right: 0.3em;\n}\n\n.yourSearchResult .summa"+
"ry .chkBoxLabel {\n\tfont-size: 10px;\n\n\tpadding-right: 0.3em;\n}\n\n/*}}}*/\n/***\n!!Items Area\n***/\n/*{{{*"+
"/\n.yourSearchResult .marked {\n\tbackground: none;\n\tfont-weight: bold;\n}\n\n.yourSearchItem {\n\tmargin-to"+
"p: 2px;\n}\n\n.yourSearchNumber {\n\tcolor: #808080;\n}\n\n\n.yourSearchTags {\n\tcolor: #008000;\n}\n\n.yourSearc"+
"hText {\n\tcolor: #808080;\n\tmargin-bottom: 6px;\n}\n\n/*}}}*/\n/***\n!!Footer\n***/\n/*{{{*/\n.yourSearchFoote"+
"r {\n\tmargin-top: 8px;\n\tborder-top-width: thin;\n\tborder-top-style: solid;\n\tborder-top-color: #999999;"+
"\n}\n\n.yourSearchFooter a:hover{\n\tbackground: none;\n\tcolor: none;\n}\n/*}}}*/\n/***\n!!Navigation Bar\n***/"+
"\n/*{{{*/\n.yourSearchNaviBar a {\n\tfont-size: 16px;\n\tmargin-left: 4px;\n\tmargin-right: 4px;\n\tcolor: bla"+
"ck;\n\ttext-decoration: underline;\n}\n\n.yourSearchNaviBar a:hover {\n\tbackground-color: none;\n}\n\n.yourSe"+
"archNaviBar .prev {\n\tfont-weight: bold;\n\tcolor: blue;\n}\n\n.yourSearchNaviBar .currentPage {\n\tcolor: #"+
"FF0000;\n\tfont-weight: bold;\n\ttext-decoration: none;\n}\n\n.yourSearchNaviBar .next {\n\tfont-weight: bold"+
";\n\tcolor: blue;\n}\n/*}}}*/\n";
config.shadowTiddlers["YourSearchResultTemplate"] =
"<!--\n{{{\n-->\n<span macro=\"yourSearch if found\">\n<!-- The Summary Header ============================"+
"================ -->\n<table class=\"summary\" border=\"0\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\">"+
"<tbody>\n <tr>\n\t<td align=\"left\">\n\t\tYourSearch Result <span class=\"yourSearchRange\" macro=\"yourSearc"+
"h itemRange\"></span>\n\t\t of <span class=\"yourSearchCount\" macro=\"yourSearch count\"></span>\n"+
"\t\tfor <span class=\"yourSearchQuery\" macro=\"yourSearch query\"></span>\n\t</td>\n\t<td class=\"yourSea"+
"rchButtons\" align=\"right\">\n\t\t<span macro=\"yourSearch chkPreviewText\"></span><span class=\"chkBoxLabel"+
"\">preview text</span>\n\t\t<span macro=\"yourSearch newTiddlerButton\"></span>\n\t\t<span macro=\"yourSearch openAllButton\"></span>\n\t\t<span macro=\"yourSearch lin"+
"kButton 'YourSearch Options' options 'Configure YourSearch'\"></span>\n\t\t<span macro=\"yourSearch linkB"+
"utton 'YourSearch Help' help 'Get help how to use YourSearch'\"></span>\n\t\t<span macro=\"yourSearch clo"+
"seButton\"></span>\n\t</td>\n </tr>\n</tbody></table>\n\n<!-- The List of Found Tiddlers ================="+
"=========================== -->\n<div id=\"yourSearchResultItems\" itemsPerPage=\"25\" itemsPerPageWithPr"+
"eview=\"10\"></div>\n\n<!-- The Footer (with the Navigation) ==========================================="+
"= -->\n<table class=\"yourSearchFooter\" border=\"0\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\"><tbody"+
">\n <tr>\n\t<td align=\"left\">\n\t\tResult page: <span class=\"yourSearchNaviBar\" macro=\"yourSearch naviBar"+
"\"></span>\n\t</td>\n\t<td align=\"right\"><span macro=\"yourSearch version\"></span>, <span macro=\"yourSearc"+
"h copyright\"></span>\n\t</td>\n </tr>\n</tbody></table>\n<!-- end of the 'tiddlers found' case ========="+
"================================== -->\n</span>\n\n\n<!-- The \"No tiddlers found\" case ================="+
"========================== -->\n<span macro=\"yourSearch if not found\">\n<table class=\"summary\" border="+
"\"0\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\"><tbody>\n <tr>\n\t<td align=\"left\">\n\t\tYourSearch Resu"+
"lt: No tiddlers found for <span class=\"yourSearchQuery\" macro=\"yourSearch query\"></span>.\n\t</td>\n\t<t"+
"d class=\"yourSearchButtons\" align=\"right\">\n\t\t<span macro=\"yourSearch newTiddlerButton\"></span>\n\t\t<span macro=\"yourSearch linkButton 'YourSearch Options'"+
" options 'Configure YourSearch'\"></span>\n\t\t<span macro=\"yourSearch linkButton 'YourSearch Help' help"+
" 'Get help how to use YourSearch'\"></span>\n\t\t<span macro=\"yourSearch closeButton\"></span>\n\t</td>\n <"+
"/tr>\n</tbody></table>\n</span>\n\n\n<!--\n}}}\n-->\n";
config.shadowTiddlers["YourSearchItemTemplate"] =
"<!--\n{{{\n-->\n<span class='yourSearchNumber' macro='foundTiddler number'></span>\n<span class='yourSea"+
"rchTitle' macro='foundTiddler title'/></span> - \n<span class='yourSearchTags' macro='found"+
"Tiddler field tags 50'/></span>\n<span macro=\"yourSearch if previewText\"><div class='yourSearchText' macro='fo"+
"undTiddler field text 250'/></div></span>\n<!--\n}}}\n-->";
config.shadowTiddlers["YourSearch"] = "<<tiddler [[YourSearch Help]]>>";
config.shadowTiddlers["YourSearch Result"] = "The popup-like window displaying the result of a YourSearch query.";
//----------------------------------------------------------------------------
// Install YourSearch
//----------------------------------------------------------------------------
// Overwrite the TiddlyWiki search handler and verify after a while
// that nobody else has overwritten it.
config.macros.search.handler = myMacroSearchHandler;
var checkForOtherHijacker = function() {
// Check that still our search handler is installed
if (config.macros.search.handler != myMacroSearchHandler) {
alert(
"Message from YourSearchPlugin:\n\n\nAnother plugin has disabled the 'Your Search' features.\n\n\nYou may "+
"disable the other plugin or change the load order of \nthe plugins (by changing the names of the tidd"+
"lers)\nto enable the 'Your Search' features.");
}
};
setTimeout(checkForOtherHijacker, 5000);
// === Public API =================================
abego.YourSearch.getStandardRankFunction = function() {
return standardRankFunction;
};
abego.YourSearch.getRankFunction = function() {
return abego.YourSearch.getStandardRankFunction();
};
abego.YourSearch.getCurrentTiddler = function() {
return currentTiddler;
};
abego.YourSearch.closeResult = function() {
closeResult();
}
})();
} // of "install only once"
// Used Globals (for JSLint) ==============
// ... JavaScript Core
/*global alert,clearTimeout,confirm */
// ... TiddlyWiki Core
/*global Tiddler, applyHtmlMacros, clearMessage, createTiddlyElement, createTiddlyButton, createTiddlyText, ensureVisible ,findPosX, highlightHack, findPosY,findWindowWidth, invokeMacro, saveChanges, refreshElements, story */
//}}}
/***
!Licence and Copyright
Copyright (c) abego Software ~GmbH, 2005-2006 ([[www.abego-software.de|http://www.abego-software.de]])
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
Neither the name of abego Software nor the names of its contributors may be
used to endorse or promote products derived from this software without specific
prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
DAMAGE.
***/
/***
===============================================================================
Author : Dawn Ahukanna
Version : $Id: Macro_getPluginInfo.js 435 2007-01-04 20:49:17Z dahukanna $
===============================================================================
----
''Name:'' _GetPluginInfo
''Summary:'' <<getPlugin _GetPluginInfo summary>>
''Description:'' <<getPlugin _GetPluginInfo description>>
''Version:'' <<getPlugin _GetPluginInfo>>
''Date:'' <<getPlugin _GetPluginInfo date>>
''Author:'' <<getPlugin _GetPluginInfo author>>
''Source:'' <<getPlugin _GetPluginInfo code>>
''Documentation:'' <<getPlugin _GetPluginInfo doc>>
''License:'' [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]
''Browsers:'' InternetExplorer 6.0, FireFox 1.5.x, FireFox 2.0.x
''~CoreVersion:'' <<getPlugin _GetPluginInfo coreVersion>>
----
!Code
***/
//{{{
version.extensions._GetPluginInfo= {major: 2, minor: 1, revision: 0, date: new Date("Jan 2, 2007"), code: "http://project.dahukanna.net/tiddlywiki/twextensions.htm#_GetPluginInfo", doc: "http://project.dahukanna.net/tiddlywiki/twextensions.htm#_GetPluginInfoDoc", author: "DawnAhukanna dawn[at]dahukanna[dot]net", summary: "_GetPluginInfo for TiddlyWiki version 2.1.3 or above.", description: "Displays the following information - version, date, source and author about plugins in this collection using the ''version.extensions.[pluginName]'' attributes. All other plugins use this macro to display plugin details.", coreVersion: "2.1.0"};
config.macros.getPlugin = {dateFormat: "DD MMM YYYY"}
config.macros.getPlugin.handler = function(place,macroName,params){
var pluginName = params[0]; //params[0]: pluginName (string) that matches with version.extensions.[pluginName] declaration.
var pluginAttributeName = params[1]; //params[1]: Plugin info to retrieve e.g "date". If not supplied then "version" is supplied by default.
var pluginAttribute="";
switch (pluginAttributeName){
case "author" :
pluginAttribute = version.extensions[pluginName][pluginAttributeName];
createTiddlyLink(createTiddlyElement(place,"span",null,null,null),pluginAttribute,true);
break;
case "code" :
case "doc" :
pluginAttribute = version.extensions[pluginName][pluginAttributeName];
createTiddlyElement(place,"span",null,null,pluginAttribute);
break;
case "date" :
pluginAttribute = version.extensions[pluginName][pluginAttributeName].formatString(this.dateFormat);
case "summary" :
case "description" :
case "coreVersion" :
if(pluginAttribute == ""){
pluginAttribute = version.extensions[pluginName][pluginAttributeName];
}
createTiddlyElement(place,"span",null,null,pluginAttribute);
break;
default ://Display plugin version attribute
pluginAttribute = version.extensions[pluginName].major + "." + version.extensions[pluginName].minor + "." + version.extensions[pluginName].revision;
createTiddlyElement(place,"span",null,null,pluginAttribute);
}
}
//}}}
//----
/***
===============================================================================
Author : Dawn Ahukanna
Version : $Id: Macro_getPluginInfo.js 435 2007-01-04 20:49:17Z dahukanna $
===============================================================================
----
''Name:'' _GetPluginInfo
''Summary:'' <<getPlugin _GetPluginInfo summary>>
''Description:'' <<getPlugin _GetPluginInfo description>>
''Version:'' <<getPlugin _GetPluginInfo>>
''Date:'' <<getPlugin _GetPluginInfo date>>
''Author:'' <<getPlugin _GetPluginInfo author>>
''Source:'' <<getPlugin _GetPluginInfo code>>
''Documentation:'' <<getPlugin _GetPluginInfo doc>>
''License:'' [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]
''Browsers:'' InternetExplorer 6.0, FireFox 1.5.x, FireFox 2.0.x
''~CoreVersion:'' <<getPlugin _GetPluginInfo coreVersion>>
----
!Dependencies
<<<
None
<<<
!Usage
<<<
Displays the following information from plugins in this collection using the ''version.extensions.[pluginName]'' attributes: Currently all plugins have the following attributes:
#version
#date
#code
#doc
#author.
#summary.
#description.
#coreVersion.
<<<
!Installation
<<<
Import (or copy/paste) the following tiddler into your document:
''_GetPluginInfo'' (tagged with <<tag systemConfig>>)
<<<
!Configuration
<<<
''Syntax''
{{{
<<getPlugin [pluginName] [attribute]>>
}}}
Where ''[attribute]'' is the name of a plugin attribute. If none or an incorrect attribute is supplied, the ''version'' attribute is returned as default. The follwing are valid attributes:
|Plugin attribute name |Description |h
|''version'' |Version of plugin and also default attribute. |
|''author'' |Author's name (in camel case) of plugin. |
|''date'' |Release date of plugin. |
|''code'' |URL for plugin code. |
|''doc'' |URL for plugin documentation. |
|''summary'' |Short description of plugin functionality. |
|''description'' |Long description of plugin functionality. |
|''coreVersion'' |TiddlyWiki version required. Interacts with plugin manager for dependencies. |
''Examples''
|Code |Result |h
|{{{<<getPlugin _GetPluginInfo>>}}} |<<getPlugin _GetPluginInfo>>|
|{{{<<getPlugin _GetPluginInfo code>>}}} |<<getPlugin _GetPluginInfo code>> |
|{{{<<getPlugin _GetPluginInfo doc>>}}} |<<getPlugin _GetPluginInfo doc>> |
|{{{<<getPlugin _GetPluginInfo date>>}}} |<<getPlugin _GetPluginInfo date>> |
|{{{<<getPlugin _GetPluginInfo author>>}}} |<<getPlugin _GetPluginInfo author>> |
|{{{<<getPlugin _GetPluginInfo version>>}}} |<<getPlugin _GetPluginInfo version>> |
|{{{<<getPlugin _GetPluginInfo summary>>}}} |<<getPlugin _GetPluginInfo summary>> |
|{{{<<getPlugin _GetPluginInfo description>>}}} |<<getPlugin _GetPluginInfo description>> |
|{{{<<getPlugin _GetPluginInfo coreVersion>>}}} |<<getPlugin _GetPluginInfo coreVersion>> |
<<<
!Revision History
<<<
|Release |Date |Comments|h
|2.1.0 |2 Jan 2007 |Updated and tested with version 2.1.3. Added ''code'', ''doc'', ''summary'', ''description'' and ''coreVersion'' attributes. Refactored the switch statment to use one code block for multiple cases.|
|1.0.1 |12 Mar 2006 |Refactored the code to have one macro with multiple parameters. |
|1.0.0 |12 Mar 2006 |Initial release |
<<<
!Known Issues
<<<
This line of js code does not work -
{{{
date: new Date(2007,1,2)
}}}
, had to use this instead -
{{{
date: new Date("Jan 2, 2007")
}}}
<<<
!To Do
<<<
#Sort out Javascript date issue. Update all dependent macros to use new date format.
#Create wikified urls for code and doc attributes.
<<<
!Credits
<<<
This extension was produced by DawnAhukanna.
<<<
/***
===============================================================================
Author : Dawn Ahukanna
Version : $Id: Macro_getPluginInfo.js 435 2007-01-04 20:49:17Z dahukanna $
===============================================================================
----
''Name:'' _GetPluginInfo
''Summary:'' <<getPlugin _GetPluginInfo summary>>
''Description:'' <<getPlugin _GetPluginInfo description>>
''Version:'' <<getPlugin _GetPluginInfo>>
''Date:'' <<getPlugin _GetPluginInfo date>>
''Author:'' <<getPlugin _GetPluginInfo author>>
''Source:'' <<getPlugin _GetPluginInfo code>>
''Documentation:'' <<getPlugin _GetPluginInfo doc>>
''License:'' [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]
''Browsers:'' InternetExplorer 6.0, FireFox 1.5.x, FireFox 2.0.x
''~CoreVersion:'' <<getPlugin _GetPluginInfo coreVersion>>
----
!Dependencies
<<<
None
<<<
!Usage
<<<
Displays the following information from plugins in this collection using the ''version.extensions.[pluginName]'' attributes: Currently all plugins have the following attributes:
#version
#date
#code
#doc
#author.
#summary.
#description.
#coreVersion.
<<<
!Installation
<<<
Import (or copy/paste) the following tiddler into your document:
''_GetPluginInfo'' (tagged with <<tag systemConfig>>)
<<<
!Configuration
<<<
''Syntax''
{{{
<<getPlugin [pluginName] [attribute]>>
}}}
Where ''[attribute]'' is the name of a plugin attribute. If none or an incorrect attribute is supplied, the ''version'' attribute is returned as default. The follwing are valid attributes:
|Plugin attribute name |Description |h
|''version'' |Version of plugin and also default attribute. |
|''author'' |Author's name (in camel case) of plugin. |
|''date'' |Release date of plugin. |
|''code'' |URL for plugin code. |
|''doc'' |URL for plugin documentation. |
|''summary'' |Short description of plugin functionality. |
|''description'' |Long description of plugin functionality. |
|''coreVersion'' |TiddlyWiki version required. Interacts with plugin manager for dependencies. |
''Examples''
|Code |Result |h
|{{{<<getPlugin _GetPluginInfo>>}}} |<<getPlugin _GetPluginInfo>>|
|{{{<<getPlugin _GetPluginInfo code>>}}} |<<getPlugin _GetPluginInfo code>> |
|{{{<<getPlugin _GetPluginInfo doc>>}}} |<<getPlugin _GetPluginInfo doc>> |
|{{{<<getPlugin _GetPluginInfo date>>}}} |<<getPlugin _GetPluginInfo date>> |
|{{{<<getPlugin _GetPluginInfo author>>}}} |<<getPlugin _GetPluginInfo author>> |
|{{{<<getPlugin _GetPluginInfo version>>}}} |<<getPlugin _GetPluginInfo version>> |
|{{{<<getPlugin _GetPluginInfo summary>>}}} |<<getPlugin _GetPluginInfo summary>> |
|{{{<<getPlugin _GetPluginInfo description>>}}} |<<getPlugin _GetPluginInfo description>> |
|{{{<<getPlugin _GetPluginInfo coreVersion>>}}} |<<getPlugin _GetPluginInfo coreVersion>> |
<<<
!Revision History
<<<
|Release |Date |Comments|h
|2.1.0 |2 Jan 2007 |Updated and tested with version 2.1.3. Added ''code'', ''doc'', ''summary'', ''description'' and ''coreVersion'' attributes. Refactored the switch statment to use one code block for multiple cases.|
|1.0.1 |12 Mar 2006 |Refactored the code to have one macro with multiple parameters. |
|1.0.0 |12 Mar 2006 |Initial release |
<<<
!Known Issues
<<<
This line of js code does not work -
{{{
date: new Date(2007,1,2)
}}}
, had to use this instead -
{{{
date: new Date("Jan 2, 2007")
}}}
<<<
!To Do
<<<
#Sort out Javascript date issue. Update all dependent macros to use new date format.
#Create wikified urls for code and doc attributes.
<<<
!Credits
<<<
This extension was produced by DawnAhukanna.
<<<
----
!Code
***/
//{{{
version.extensions._GetPluginInfo= {major: 2, minor: 1, revision: 0, date: new Date("Jan 2, 2007"), code: "http://project.dahukanna.net/tiddlywiki/twextensions.htm#_GetPluginInfo", doc: "http://project.dahukanna.net/tiddlywiki/twextensions.htm#_GetPluginInfoDoc", author: "DawnAhukanna dawn[at]dahukanna[dot]net", summary: "_GetPluginInfo for TiddlyWiki version 2.1.3 or above.", description: "Displays the following information - version, date, source and author about plugins in this collection using the ''version.extensions.[pluginName]'' attributes. All other plugins use this macro to display plugin details.", coreVersion: "2.1.0"};
config.macros.getPlugin = {dateFormat: "DD MMM YYYY"}
config.macros.getPlugin.handler = function(place,macroName,params){
var pluginName = params[0]; //params[0]: pluginName (string) that matches with version.extensions.[pluginName] declaration.
var pluginAttributeName = params[1]; //params[1]: Plugin info to retrieve e.g "date". If not supplied then "version" is supplied by default.
var pluginAttribute="";
switch (pluginAttributeName){
case "author" :
pluginAttribute = version.extensions[pluginName][pluginAttributeName];
createTiddlyLink(createTiddlyElement(place,"span",null,null,null),pluginAttribute,true);
break;
case "code" :
case "doc" :
pluginAttribute = version.extensions[pluginName][pluginAttributeName];
createTiddlyElement(place,"span",null,null,pluginAttribute);
break;
case "date" :
pluginAttribute = version.extensions[pluginName][pluginAttributeName].formatString(this.dateFormat);
case "summary" :
case "description" :
case "coreVersion" :
if(pluginAttribute == ""){
pluginAttribute = version.extensions[pluginName][pluginAttributeName];
}
createTiddlyElement(place,"span",null,null,pluginAttribute);
break;
default ://Display plugin version attribute
pluginAttribute = version.extensions[pluginName].major + "." + version.extensions[pluginName].minor + "." + version.extensions[pluginName].revision;
createTiddlyElement(place,"span",null,null,pluginAttribute);
}
}
//}}}
//----
Les aventures que vous allez lire ici sont inspirées de faits réels. Par respect pour les personnes encore en vie, les noms ont été changés.
Pourtant, étant donné la part de merveilleux ajoutée, il n'est pas possible de les reproduire dans la vie. N'essayez pas de les reproduire dans la vie, vous vous mettriez en situation périlleuse. En aucun cas la responsabilité de l'Auteur, de son Traducteur, de son Relecteur ou de son Éditeur ne saurait être engagée
Jemapel ~TuhéKi ~KiHéTu
|[[étage13]]|<<siteMap 190>>|
|[[labyrinthe]]|<<siteMap 099>>|
|<<tag mort>>|<<siteMap 084>>|
|dans le bureau: révélation de ce qu'est l'entreprise|<<siteMap 270>>|
|[[début]] |<<siteMap 005>>||
|[[intro]]|<<siteMap 001>>||
|[[chambre]]|<<siteMap 236>>|le 264 mène au 236|
<<relatedTiddlers 236 hideform>>
*Jannick Jaulin et ses contes [[125]]
* Dante et sa Divine Comédie, pour Cerbère [[170]]
* Jeremy Ruston pour TddlyWiki , sans quoi rien n'aurait commencé
proposition de démarrage.
Absolument développer le 001
Développer la boucle entre le 247 et le 139: accident sur la route ? information capitale pour la suite
How to Build a Universe That Doesn't Fall Apart Two Days Later
Philip K. Dick, 1978
First, before I begin to bore you with the usual sort of things science fiction writers say in speeches, let me bring you official greetings from Disneyland. I consider myself a spokesperson for Disneyland because I live just a few miles from it — and, as if that were not enough, I once had the honour of being interviewed there by Paris TV.
For several weeks after the interview, I was really ill and confined to bed. I think it was the whirling teacups that did it. Elizabeth Antebi, who was the producer of the film, wanted to have me whirling around in one of the giant teacups while discussing the rise of fascism with Norman Spinrad... an old friend of mine who writes excellent science fiction. We also discussed Watergate, but we did that on the deck of Captain Hook's pirate ship. Little children wearing Mickey Mouse hats — those black hats with the ears — kept running up and bumping against us as the cameras whirred away and Elizabeth asked unexpected questions. Norman and I, being preoccupied with tossing little children about, said some extraordinarily stupid things that day. Today, however, I will have to accept full blame for what I tell you, since none of you are wearing Mickey Mouse hats and trying to climb up on me under the impression that I am part of the rigging of a pirate ship.
Science fiction writers, I am sorry to say, really do not know anything. We can't talk about science, because our knowledge of it is limited and unofficial, and usually our fiction is dreadful. A few years ago, no college or university would ever have considered inviting one of us to speak. We were mercifully confined to lurid pulp magazines, impressing no one. In those days, friends would say me, "But are you writing anything serious?" meaning "Are you writing anything other than science fiction?" We longed to be accepted. We yearned to be noticed. Then, suddenly, the academic world noticed us, we were invited to give speeches and appear on panels — and immediately we made idiots of ourselves. The problem is simply this: What does a science fiction writer know about? On what topic is he an authority?
It reminds me of a headline that appeared in a California newspaper just before I flew here. SCIENTISTS SAY THAT MICE CANNOT BE MADE TO LOOK LIKE HUMAN BEINGS. It was a federally funded research program, I suppose. Just think: Someone in this world is an authority on the topic of whether mice can or cannot put on two-tone shoes, derby hats, pinstriped shirts, and Dacron pants, and pass as humans.
Well, I will tell you what interests me, what I consider important. I can't claim to be an authority on anything, but I can honestly say that certain matters absolutely fascinate me, and that I write about them all the time. The two basic topics which fascinate me are "What is reality?" and "What constitutes the authentic human being?" Over the twenty-seven years in which I have published novels and stories I have investigated these two interrelated topics over and over again. I consider them important topics. What are we? What is it which surrounds us, that we call the not-me, or the empirical or phenomenal world?
In 1951, when I sold my first story, I had no idea that such fundamental issues could be pursued in the science fiction field. I began to pursue them unconsciously. My first story had to do with a dog who imagined that the garbagemen who came every Friday morning were stealing valuable food which the family had carefully stored away in a safe metal container. Every day, members of the family carried out paper sacks of nice ripe food, stuffed them into the metal container, shut the lid tightly — and when the container was full, these dreadful-looking creatures came and stole everything but the can.
Finally, in the story, the dog begins to imagine that someday the garbagemen will eat the people in the house, as well as stealing their food. Of course, the dog is wrong about this. We all know that garbagemen do not eat people. But the dog's extrapolation was in a sense logical — given the facts at his disposal. The story was about a real dog, and I used to watch him and try to get inside his head and imagine how he saw the world. Certainly, I decided, that dog sees the world quite differently than I do, or any humans do. And then I began to think, Maybe each human being lives in a unique world, a private world, a world different from those inhabited and experienced by all other humans. And that led me wonder, If reality differs from person to person, can we speak of reality singular, or shouldn't we really be talking about plural realities? And if there are plural realities, are some more true (more real) than others? What about the world of a schizophrenic? Maybe, it's as real as our world. Maybe we cannot say that we are in touch with reality and he is not, but should instead say, His reality is so different from ours that he can't explain his to us, and we can't explain ours to him. The problem, then, is that if subjective worlds are experienced too differently, there occurs a breakdown of communication... and there is the real illness.
I once wrote a story about a man who was injured and taken to a hospital. When they began surgery on him, they discovered that he was an android, not a human, but that he did not know it. They had to break the news to him. Almost at once, Mr. Garson Poole discovered that his reality consisted of punched tape passing from reel to reel in his chest. Fascinated, he began to fill in some of the punched holes and add new ones. Immediately, his world changed. A flock of ducks flew through the room when he punched one new hole in the tape. Finally he cut the tape entirely, whereupon the world disappeared. However, it also disappeared for the other characters in the story... which makes no sense, if you think about it. Unless the other characters were figments of his punched- tape fantasy. Which I guess is what they were.
It was always my hope, in writing novels and stories which asked the question "What is reality?", to someday get an answer. This was the hope of most of my readers, too. Years passed. I wrote over thirty novels and over a hundred stories, and still I could not figure out what was real. One day a girl college student in Canada asked me to define reality for her, for a paper she was writing for her philosophy class. She wanted a one-sentence answer. I thought about it and finally said, "Reality is that which, when you stop believing in it, doesn't go away." That's all I could come up with. That was back in 1972. Since then I haven't been able to define reality any more lucidly.
But the problem is a real one, not a mere intellectual game. Because today we live in a society in which spurious realities are manufactured by the media, by governments, by big corporations, by religious groups, political groups — and the electronic hardware exists by which to deliver these pseudo-worlds right into the heads of the reader, the viewer, the listener. Sometimes when I watch my eleven-year-old daughter watch TV, I wonder what she is being taught. The problem of miscuing; consider that. A TV program produced for adults is viewed by a small child. Half of what is said and done in the TV drama is probably misunderstood by the child. Maybe it's all misunderstood. And the thing is, Just how authentic is the information anyhow, even if the child correctly understood it? What is the relationship between the average TV situation comedy to reality? What about the cop shows? Cars are continually swerving out of control, crashing, and catching fire. The police are always good and they always win. Do not ignore that point: The police always win. What a lesson that is. You should not fight authority, and even if you do, you will lose. The message here is, Be passive. And — cooperate. If Officer Baretta asks you for information, give it to him, because Officer Baretta is a good man and to be trusted. He loves you, and you should love him.
So I ask, in my writing, What is real? Because unceasingly we are bombarded with pseudo-realities manufactured by very sophisticated people using very sophisticated electronic mechanisms. I do not distrust their motives; I distrust their power. They have a lot of it. And it is an astonishing power: that of creating whole universes, universes of the mind. I ought to know. I do the same thing. It is my job to create universes, as the basis of one novel after another. And I have to build them in such a way that they do not fall apart two days later. Or at least that is what my editors hope. However, I will reveal a secret to you: I like to build universes which do fall apart. I like to see them come unglued, and I like to see how the characters in the novels cope with this problem. I have a secret love of chaos. There should be more of it. Do not believe — and I am dead serious when I say this — do not assume that order and stability are always good, in a society or in a universe. The old, the ossified, must always give way to new life and the birth of new things. Before the new things can be born the old must perish. This is a dangerous realization, because it tells us that we must eventually part with much of what is familiar to us. And that hurts. But that is part of the script of life. Unless we can psychologically accommodate change, we ourselves begin to die, inwardly. What I am saying is that objects, customs, habits, and ways of life must perish so that the authentic human being can live. And it is the authentic human being who matters most, the viable, elastic organism which can bounce back, absorb, and deal with the new.
Of course, I would say this, because I live near Disneyland, and they are always adding new rides and destroying old ones. Disneyland is an evolving organism. For years they had the Lincoln Simulacrum, like Lincoln himself, was only a temporary form which matter and energy take and then lose. The same is true of each of us, like it or not.
The pre Socratic Greek philosopher Parmenides taught that the only things that are real are things which never change... and the pre- Socratic Greek philosopher Heraclitus taught that everything changes. If you superimpose their two views, you get this result: Nothing is real. There is a fascinating next step to this line of thinking: Parmenides could never have existed because he grew old and died and disappeared, so, according to his own philosophy, he did not exist. And Heraclitus may have been right — let's not forget that; so if Heraclitus was right, then Parmenides did exist, and therefore, according to Heraclitus' philosophy, perhaps Parmenides was right, since Parmenides fulfilled the conditions, the criteria, by which Heraclitus judged things real.
I offer this merely to show that as soon as you begin to ask what is ultimately real, you right away begin talk nonsense. Zeno proved that motion was impossible (actually he only imagined that he had proved this; what he lacked was what technically is called the "theory of limits"). David Hume, the greatest skeptic of them all, once remarked that after a gathering of skeptics met to proclaim the veracity of skepticism as a philosophy, all of the members of the gathering nonetheless left by the door rather than the window. I see Hume's point. It was all just talk. The solemn philosophers weren't taking what they said seriously.
But I consider that the matter of defining what is real — that is a serious topic, even a vital topic. And in there somewhere is the other topic, the definition of the authentic human. Because the bombardment of pseudo- realities begins to produce inauthentic humans very quickly, spurious humans — as fake as the data pressing at them from all sides. My two topics are really one topic; they unite at this point. Fake realities will create fake humans. Or, fake humans will generate fake realities and then sell them to other humans, turning them, eventually, into forgeries of themselves. So we wind up with fake humans inventing fake realities and then peddling them to other fake humans. It is just a very large version of Disneyland. You can have the Pirate Ride or the Lincoln Simulacrum or Mr. Toad's Wild Ride — you can have all of them, but none is true.
In my writing I got so Interested in fakes that I finally came up with the concept of fake fakes. For example, in Disneyland there are fake birds worked by electric motors which emit caws and shrieks as you pass by them. Suppose some night all of us sneaked into the park with real birds and substituted them for the artificial ones. Imagine the horror the Disneyland officials would feet when they discovered the cruel hoax. Real birds! And perhaps someday even real hippos and lions. Consternation. The park being cunningly transmuted from the unreal to the real, by sinister forces. For instance, suppose the Matterhom turned into a genuine snow-covered mountain? What if the entire place, by a miracle of God's power and wisdom, was changed, in a moment, in the blink of an eye, into something incorruptible? They would have to close down.
In Plato's Timaeus, God does not create the universe, as does the Christian God; He simply finds it one day. It is in a state of total chaos. God sets to work to transform the chaos into order. That idea appeals to me, and I have adapted it to fit my own intellectual needs: What if our universe started out as not quite real, a sort of illusion, as the Hindu religion teaches, and God, out of love and kindness for us, is slowly transmuting it, slowly and secretly, into something real?
We would not be aware of this transformation, since we were not aware that our world was an illusion in the first place. This technically is a Gnostic idea. Gnosticism is a religion which embraced Jews, Christians, and pagans for several centuries. I have been accused of holding Gnostic ideas. I guess I do. At one time I would have been burned. But some of their ideas intrigue me. One time, when I was researching Gnosticism in the Britannica, I came across mention of a Gnostic codex called The Unreal God and the Aspects of His Nonexistent Universe, an idea which reduced me, to helpless laughter. What kind of person would write about something that he knows doesn't exist, and how can something that doesn't exist have aspects? But then I realized that I'd been writing about these matters for over twenty-five years. I guess there is a lot of latitude in what you can say when writing about a topic that does not exist. A friend of mine once published a book called Snakes of Hawaii. A number of libraries wrote him ordering copies. Well, there are no snakes in Hawaii. A11 the pages of his book were blank.
Of course, in science fiction no pretense is made that the worlds described are real. This is why we call it fiction. The reader is warned in advance not to believe what he is about to read. Equally true, the visitors to Disneyland understand that Mr. Toad does not really exist and that the pirates are animated by motors and servo-assist mechanisms, relays and electronic circuits. So no deception is taking place.
And yet the strange thing is, in some way, some real way, much of what appears under the title "science fiction" is true. It may not be literally true, I suppose. We have not really been invaded by creatures from another star system, as depicted in Close Encounters of the Third Kind. The producers of that film never intended for us to believe it. Or did they?
And, more important, if they did intend to state this, is it actually true? That is the issue: not, Does the author or producer believe it, but — Is it true? Because, quite by accident, in the pursuit of a good yarn, a science fiction author or producer or scriptwriter might stumble onto the truth... and only later on realize it.
The basic tool for the manipulation of reality is the manipulation of words. If you can control the meaning of words, you can control the people who must use the words. George Orwell made this clear in his novel 1984. But another way to control the minds of people is to control their perceptions. If you can get them to see the world as you do, they will think as you do. Comprehension follows perception. How do you get them to see the reality you see? After all, it is only one reality out of many. Images are a basic constituent: pictures. This is why the power of TV to influence young minds is so staggeringly vast. Words and pictures are synchronized. The possibility of total control of the viewer exists, especially the young viewer. TV viewing is a kind of sleep- learning. An EEG of a person watching TV shows that after about half an hour the brain decides that nothing is happening, and it goes into a hypnoidal twilight state, emitting alpha waves. This is because there is such little eye motion. In addition, much of the information is graphic and therefore passes into the right hemisphere of the brain, rather than being processed by the left, where the conscious personality is located. Recent experiments indicate that much of what we see on the TV screen is received on a subliminal basis. We only imagine that we consciously see what is there. The bulk of the messages elude our attention; literally, after a few hours of TV watching, we do not know what we have seen. Our memories are spurious, like our memories of dreams; the blanks are filled in retrospectively. And falsified. We have participated unknowingly in the creation of a spurious reality, and then we have obligingly fed it to ourselves. We have colluded in our own doom.
And — and I say this as a professional fiction writer — the producers, scriptwriters, and directors who create these video/audio worlds do not know how much of their content is true. In other words, they are victims of their own product, along with us. Speaking for myself, I do not know how much of my writing is true, or which parts (if any) are true. This is a potentially lethal situation. We have fiction mimicking truth, and truth mimicking fiction. We have a dangerous overlap, a dangerous blur. And in all probability it is not deliberate. In fact, that is part of the problem. You cannot legislate an author into correctly labeling his product, like a can of pudding whose ingredients are listed on the label... you cannot compel him to declare what part is true and what isn't if he himself does not know.
It is an eerie experience to write something into a novel, believing it is pure fiction, and to learn later on — perhaps years later — that it is true. I would like to give you an example. It is something that I do not understand. Perhaps you can come up with a theory. I can't.
In 1970 I wrote a novel called Flow My Tears, the Policeman Said. One of the characters is a nineteen-year-old girl named Kathy. Her husband's name is Jack. Kathy appears to work for the criminal underground, but later, as we read deeper into the novel, we discover that actually she is working for the police. She has a relationship going on with a police inspector. The character is pure fiction. Or at least I thought it was.
Anyhow, on Christmas Day of 1970, I met a girl named Kathy - this was after I had finished the novel, you understand. She was nineteen years old. Her boyfriend was named Jack. I soon learned that Kathy was a drug dealer. I spent months trying to get her to give up dealing drugs; I kept warning her again and again that she would get caught. Then, one evening as we were entering a restaurant together, Kathy stopped short and said, "I can't go in." Seated in the restaurant was a police inspector whom I knew. "I have to tell you the truth," Kathy said. "I have a relationship with him."
Certainly, these are odd coincidences. Perhaps I have precognition. But the mystery becomes even more perplexing; the next stage totally baffles me. It has for four years.
In 1974 the novel was published by Doubleday. One afternoon I was talking to my priest - I am an Episcopalian — and I happened to mention to him an important scene near the end of the novel in which the character Felix Buckman meets a black stranger at an all-night gas station, and they begin to talk. As I described the scene in more and more detail, my priest became progressively more agitated. At last he said, 'That is a scene from the Book of Acts, from the Bible! In Acts, the person who meets the black man on the road is named Philip - - your name." Father Rasch was so upset by the resemblance that he could not even locate the scene in his Bible. "Read Acts," he instructed me. "And you'll agree. It's the same down to specific details."
I went home and read the scene in Acts. Yes, Father Rasch was right; the scene in my novel was an obvious retelling of the scene in Acts... and I had never read Acts, I must admit. But again the puzzle became deeper. In Acts, the high Roman official who arrests and interrogates Saint Paul is named Felix — the same name as my character. And my character Felix Buckman is a high-ranking police general; in fact, in my novel he holds the same office as Felix in the Book of Acts: the final authority. There is a conversation in my novel which very closely resembles a conversation between Felix and Paul.
Well, I decided to try for any further resemblances. The main character in my novel is named Jason. I got an index to the Bible and looked to see if anyone named Jason appears anywhere in the Bible. I couldn't remember any. Well, a man named Jason appears once and only once in the Bible. It is in the Book of Acts. And, as if to plague me further with coincidences, in my novel Jason is fleeing from the authorities and takes refuge in a person's house, and in Acts the man named Jason shelters a fugitive from the law in his house - an exact inversion of the situation in my novel, as if the mysterious Spirit responsible for all this was having a sort of laugh about the whole thing.
Felix, Jason, and the meeting on the road with the black man who is a complete stranger. In Acts, the disciple Philip baptizes the black man, who then goes away rejoicing. In my novel, Felix Buckman reaches out to the black stranger for emotional support, because Felix Buckman's sister has just died and he is falling apart psychologically. The black man stirs up Buckman's spirits and although Buckman does not go away rejoicing, at least his tears have stopped falling. He had been flying home, weeping over the death of his sister, and had to reach out to someone, anyone, even a total stranger. It is an encounter between two strangers on the road which changes the life of one of them — both in my novel and in Acts. And one final quirk by the mysterious Spirit at work: the name Felix is the Latin word for "happy." Which I did not know when I wrote the novel.
A careful study of my novel shows that for reasons which I cannot even begin to explain I had managed to retell several of the basic incidents from a particular book of the Bible, and even had the right names. What could explain this? That was four years ago that I discovered all this. For four years I have tried to come up with a theory and I have not. I doubt if I ever will.
But the mystery had not ended there, as I had imagined. Two months ago I was walking up to the mailbox late at night to mail off a letter, and also to enjoy the sight of Saint Joseph's Church, which sits opposite my apartment building. I noticed a man loitering suspiciously by a parked car. It looked as if he was attempting to steal the car, or maybe something from it; as I returned from the mailbox, the man hid behind a tree. On impulse I walked up to him and asked, "Is anything the matter?"
"I'm out of gas," the man said. "And I have no money."
Incredibly, because I have never done this before, I got out my wallet, took all the money from it, and handed the money to him. He then shook hands with me and asked where I lived, so that he could later pay the money back. I returned to my apartment, and then I realized that the money would do him no good, since there was no gas station within walking distance. So I returned, in my car. The man had a metal gas can in the trunk of his car, and, together, we drove in my car to an all-night gas station. Soon we were standing there, two strangers, as the pump jockey filled the metal gas can. Suddenly I realized that this was the scene in my novel — the novel written eight years before. The all-night gas station was exactly as I had envisioned it in my inner eye when I wrote the scene — the glaring white light, the pump jockey — and now I saw something which I had not seen before. The stranger who I was helping was black. We drove back to his stalled car with the gas, shook hands, and then I returned to my apartment building. I never saw him again. He could not pay me back becauseI had not told him which of the many apartments was mine or what my name was. I was terribly shaken up by this experience. I had literally lived out a scene completely as it had appeared in my novel. Which is to say, I had lived out a sort of replica of the scene in Acts where Philip encounters the black man on the road.
What could explain all this?
The answer I have come up with may not be correct, but it is the only answer I have. It has to do with time. My theory is this: In some certain important sense, time is not real. Or perhaps it is real, but not as we experience it to be or imagine it to be. I had the acute, overwhelming certitude (and still have) that despite all the change we see, a specific permanent landscape underlies the world of change: and that this invisible underlying landscape is that of the Bible; it, specifically, is the period immediately following the death and resurrection of Christ; it is, in other words, the time period of the Book of Acts.
Parmenides would be proud of me. I have gazed at a constantly changing world and declared that underneath it lies the eternal, the unchanging, the absolutely real. but how has this come about? If the real time is circa AD S0, then why do we see AD 1978? And if we are really living in the Roman Empire, somewhere in Syria, why do we see the United States?
During the Middle Ages, a curious theory arose, which I will now present to you for what it is worth. It is the theory that the Evil One — Satan — is the "Ape of God." That he creates spurious imitations of creation, of God's authentic creation, and then interpolates them for that authentic creation. Does this odd theory help explain my experience? Are we to believe that we are occluded, that we are deceived, that it is not 1978 but AD 50... and Satan has spun a counterfeit reality to wither our faith in the return of Christ?
I can just picture myself being examined by a psychiatrist. The psychiatrist says, "What year is it?" And I reply, "AD 50." The psychiatrist blinks and then asks, "And where are you?" I reply, "In Judaea." "Where the heck is that?" the psychiatrist asks. "It's part of the Roman Empire," I would have to answer. "Do you know who is President?" the psychiatrist would ask, and I would answer, "The Procurator Felix." "You're pretty sure about this?" the psychiatrist would ask, meanwhile giving a covert signal to two very large psych techs. "Yep," I'd replay. "Unless Felix has stepped down and had been replaced by the Procurator Festus. You see, Saint Paul was held by Felix for —" "Who told you all this?" the psychiatrist would break in, irritably, and I would reply, 'The Holy Spirit." And after that I'd be in the rubber room, inside gazing out, and knowing exactly how come I was there. Everything in that conversation would be true, in a sense, although palpably not true in another. I know perfectly well that the date is 1978 and that Jimmy Carter is President and that I live in Santa Ana, California, in the United States. I even know how to get from my apartment to Disneyland, a fact I can't seem to forget. And surely no Disneyland existed backat the time of Saint Paul.
So, if I force myself to be very rational and reasonable, and all those other good things, I must admit that the existence of Disneyland (which I know is real) proves that we are not living in Judaea in AD 50. The idea of Saint Paul whirling around inthe giant teacups wile composing First Corinthians, as Paris TV films him with a telephoto lens — that just can't be. Saint Paul would never go near Disneyland. Only children, tourists, and visiting Soviet high officials ever go to Disneyland. Saints do not.
But somehow that biblical material snared my unconscious and crept into my novel, and equally true, for some reason in 1978 I relived a scene which I described back in 1970. What I am saying is this: There is internal evidence in at least one of my novels that another reality, an unchanging one, exactly as Parmenides and Plato suspected, underlies the visible phenomenal world of change, and somehow, in some way, perhaps to our surprise, we can cut through to it. Or rather, a mysterious Spirit can put us in touch with it, if it wishes us to see this permanent other landscape. Time passes, thousands of years pass, but at the same instant that we see this contemporary world, the ancient world, the world of the Bible, is concealed beneath it, still. there and still real. Eternally so.
Shall I go for broke and tell you the rest of this peculiar story? I'll do so, having gone this far already. My novel Flow My Tears, the Policeman Said was released by Doubleday in February of 1974. The week after it was released, I had two impacted wisdom teeth removed, under sodium pentathol. Later that day I found myself in intense pain. My wife phoned the oral surgeon and he phoned a pharmacy. Half an hour later there was a knock at my door: the delivery person from the pharmacy with the pain medication. Although I was bleeding and sick and weak, I felt the need to answer the knock on the door myself. When I opened the door, I found myself facing a young woman — who wore a shining gold necklace in the center of which was a gleaming gold fish. For some reason I was hypnotized by the gleaming golden fish; I forgot my pain, forgot the medication, forgot why the girl was there. I just kept staring at the fish sign.
"What does that mean?" I asked her.
The girl touched the glimmering golden fish with her hand and said, "This is a sign worn by the early Christians." She then gave me the package of medication.
In that instant, as I stared at the gleaming fish sign and heard her words, I suddenly experienced what I later learned is called anamnesis — a Greek word meaning, literally, "loss of forgetfulness." I remembered who I was and where I was. In an instant, in the twinkling of an eye, it all came back to me. And not only could I remember it but I could see it. The girl was a secret Christian and so was I. We lived in fear of detection by the Romans. We had to communicate with cryptic signs. She had just told me all this, and it was true.
For a short time, as hard as this is to believe or explain, I saw fading into view the black prison like contours of hateful Rome. But, of much more importance, I remembered Jesus, who had just recently been with us, and had gone temporarily away, and would very soon return. My emotion was one of joy. We were secretly preparing to welcome Him back. It would not be long. And the Romans did not know. They thought He was dead, forever dead. That was our great secret, our joyous knowledge. Despite all appearances, Christ was going to return, and our delight and anticipation was boundless.
Isn't it odd that this strange event, this recovery of lost memory, occurred only a week after Flow My Tears was released? And it is Flow My Tears which contains the replication of people and events from the Book of Acts, which is set at the precise moment in time — just after Jesus' death and resurrection — that I remembered, by means of the golden fish sign, as having just taken place?
If you were me, and had this happen to you, I'm sure you wouldn't be able to leave it alone. You would seek a theory that would account for it. For over four years now, I have been trying one theory after another: circular time, frozen time, timeless time, what is called "sacred" as contrasted to "mundane" time... I can't count the theories I've tried out. One constant has prevailed, though, throughout all theories. There must indeed be a mysterious Holy Spirit which has an exact and intimate relation to Christ, which can indwell in human minds, guide and inform them, and even express itself through those humans, even without their awareness.
In the writing of Flow My Tears, back in 1970, there was one unusual event which I realized at the time was not ordinary, was not a part of the regular writing process. I had a dream one night, an especially vivid dream. And when I awoke I found myself under the compulsion — the absolute necessity — of getting the dream into the text of the novel precisely as I had dreamed it. In getting the dream exactly right, I had to do eleven drafts of the final part of the manuscript, until I was satisfied.
I will now quote from the novel, as it appeared in the final, published form. See if this dream reminds you of anything.
The countryside, brown and dry, in summer, where he had lived as a child. He rode a horse, and approaching him on his left a squad of horses nearing slowly. On the horses rode men in shining robes, each a different contour; each wore a pointed helmet that sparkled in the sunlight. The slow, solemn knights passed him and as they traveled by he made out the face of one: an ancient marble face, a terribly old man with rippling cascades of white beard. What a strong nose he had. What noble features. So tired, so serious, so far beyond ordinary men. Evidently he was a king. Felix Buckman let them pass; he did not speak to them and they said nothing to him. Together, they all moved toward the house from which he had come. A man had sealed himself up inside the house, a man alone, Jason Taverner, in the silence and darkness, without windows, by himself from now on into eternity. Sitting, merely existing, inert. Felix Buckman continued on, out into the open countryside. And then he heard from behind him one dreadful single shriek. They had killed Taverner, and seeing them enter, sensing them in the shadows around him, knowing what they intended to do with him, Taverner had shrieked. Within himself Felix Buckman felt absolute and utter desolate grief. But in the dream he did not go back nor look back. There was nothing that could be done. No one could have stopped the posse of varicolored men in robes; they could not have been said no to. Anyhow, it was over. Taverner was dead.
This passage probably does not suggest any particular thing to you, except a law posse exacting judgement on someone either guilty or considered guilty. It is not clear whether Taverner has in fact committed some crime or is merely believed to have committed some crime. I had the impression that he was guilty, but that it wasa tragedy that he had to be killed, a terribly sad tragedy. In the novel, this dream causes Felix Buckman to begin to cry, and therefore he seeks out the black man at the all-night gas station.
Months after the novel was published, I found the section in the Bible to which this dream refers. It is Daniel, 7:9:
Thrones were set in place and one ancient in years took his seat. His robe was white as snow and the hair of his head like cleanest wool. Flames of fire were his throne and its wheels blazing fire; a flowing river of fire streamed out before him. Thousands upon thousands served him and myriads upon myriads attended his presence. The court sat, and the book was opened.
The white-haired old man appears again in Revelation, 1:13:
I saw... one like a son of man, robed down to his feet, with a golden girdle round his breast. The hair of his head was white as snow-white wool, and his eyes flamed like fire; his feet gleamed like burnished brass refined in a furnace, and his voice was like the sound of rushing waters.
And then 1:17:
When I saw him, I fell at his feet as though dead. But he laid his right hand upon me and said, "Do not be afraid. I am the first and the last, and I am the living one, for I was dead and now I am alive for evermore, and I hold the keys of Death and Death's domain. Write down therefore what you have seen, what is now, and what will be hereafter."
And, like John of Patmos, I faithfully wrote down what I saw and put in my novel. And it was true, although at the time I did not know who was meant by this description:
... he made out the face of one: an ancient marble face, a terribly old man with rippling cascades of white beard. What a strong nose he had. What noble features. So tired, so serious, so far beyond ordinary men. Evidently he was a king.
Indeed he was a king. He is Christ Himself returned, to pass judgement. And this is what he does in my novel: He passes judgement on the man sealed up in darkness. The man sealed up in darkness must be the Prince of Evil, the Force of Darkness. Call it whatever you wish, its time had come. It was judged and condemned. Felix Buckman could weep at the sadness of it, but he knew that the verdict could not be disputed. And so he rode on, without turning or looking back, hearing only the shriek of fear and defeat: the cry of evil destroyed.
So my novel contained material from other parts of the Bible, as well as the sections from Acts. Deciphered, my novel tells a quite different story from the surface story (which we need not go into here). The real story is simply this: the return of Christ, now king rather than suffering servant. Judge rather than victim of unfair judgement. Everything is reversed. The core message of my novel, without my knowing it, was a warning to the powerful: You will shortly be judged and condemned. Who, specifically, did it refer to? Well, I can't really say; or rather would prefer not to say. I have no certain knowledge, only an intuition. And that is not enough to go on, so I will keep my thoughts to myself. But you might ask yourselves what political events took place in this country between February 1974 and August 1974. Ask yourself who was judged and condemned, and fell like a flaming star into ruin and disgrace. The most powerful man in the world. And I feel as sorry for him now as I did when I dreamed that dream. "That poor poor man," I said once to my wife, with tears in my eyes. "Shut up in the darkness, playing the piano in the night to himself, alone and afraid, knowing what's to come." For God's sake, let us forgive him, finally. But what was done to him and all his men — "all the President's men," as it's put — had to be done. But it is over, and he should be let out into the sunlight again; no creature, no person, should be shut up in darkness forever, in fear. It is not humane.
Just about the time that Supreme Court was ruling that the Nixon tapes had to be turned over to the special prosecutor, I was eating at a Chinese restaurant in Yorba Linda, the town in California where Nixon went to school — where he grew up, worked at a grocery store, where there is a park named after him, and of course the Nixon house, simple clapboard and all that. In my fortune cookie, I got the following fortune:
DEEDS DONE IN SECRET HAVE A
WAY OF BECOMING FOUND OUT
I mailed the slip of paper to the White House, mentioning that the Chinese restaurant was located within a mile of Nixon's original house, and I said, "I think a mistake has been made; by accident I got Mr. Nixon's fortune. Does he have mine?" The White House did not answer.
Well, as I said earlier, an author of a work supposed fiction might write the truth and not know it. To quote Xenophanes another pre- Socratic: Even if a man should chance to speak the most complete truth, yet he himself does not know it; all things are wrapped in appearances (Fragment 34). And Heraclitus added to this: The nature of things is in the habit of concealing itself (Fragment 54). W. S. Gilbert, of Gilbert and Sullivan, put it: Things are seldom what they seem; skim milk masquerades as cream. The point of all that is that we cannot trust our senses and probably not even our a priori reasoning. As to our senses, I understand that people who have been blind from birth and are suddenly given sight are amazed to discover that objects appear to get smaller and smaller as they get farther away. Logically, there is no reason for this. We, of course, have come to accept this, because we're used to it. We see objects get smaller, but we know that in actuality they remain the same size. So even the common everyday pragmatic person utilises a certain amount of sophisticated discounting of what his eyes and ears tell him.
Little of what Heraclitus wrote has survived, and what we do have is obscure, but Fragment 54 is lucid and important: latent structure is master of obvious structure. This means that Heraclitus believed that a veil lay over the true landscape. He also may have suspected that time was somehow not what it seemed, because in Fragment 52 he said: Time is a child at play, playing draughts; a child's is the kingdom. This is indeed cryptic. But he also said, in Fragment 18: If one does not expect it, one will not find out the unexpected; it is not to be tracked down and no path leads us to it. Edward Hussey, in his scholarly book The Pre- Socratics, says:
If Heraclitus is to be so insistent on the lack of understanding shown by most men, it would seem only reasonable that he should offer further instructions for penetrating to the truth. The talk of riddle-guessing suggests that some kind of revelation, beyond human control, is necessary... The true wisdom, as has been seen, is closely associated with God, which suggests further that in advancing wisdom a man becomes Iike, or a part of, God.
This quote is not from a religious book or a book on theology; it is an analysis of the earliest philosophers by a Lecturer in Ancient Philosophy at the University of Oxford. Hussey makes it clear that to these early philosophers there was no distinction between philosophy and religion. The first great quantum leap in Greek theology was by Xenophanes of Colophon, born in the mid-sixth century BC Xenophanes, without resorting to any authority expect that of his own mind, says:
One god there is, in no way like mortal creatures either in bodily form or in the thought of his mind. The whole of him sees, the whole of him thinks, the whole of him hears. He stays always motionless in the same place; it is not fitting that he should move about now this way, now that.
This is a subtle and advanced concept of God, evidently without precedent among the Greek thinkers. The arguments of Parmenides seemed to show that all reality must indeed be a mind, Hussey writes, or an object of thought in a mind. Regarding Heraclitus specifically, he says, In Heraclitus it is difficult to tell how far the designs in God's mind are distinguished from the execution in the world, or indeed how far God's mind is distinguished from the world. The further leap by Anaxagoras has always fascinated me. Anaxagoras had been driven to a theory of the microstructure of matter which made it, to some extent, mysterious to human reason. Anaxagoras believed that everything was determined by Mind. These were not childish thinkers, nor primitives. They debated serious issues and studied one another's views with deft insight. It was not until the time of Aristotle that their views got reduced to what we can neatly — but wrongly — classify as crude. The summation of much pre- Socratic theology and philosophy can be stated as follows: The kosmos is not as it appears to be, and what it probably is, at its deepest level, is exactly that which the human being is at his deepest level — call it mind or soul, it is something unitary which lives and thinks, and only appears to be plural and material. Much of this view reaches us through the Logos doctrine regarding Christ. The Logos was both that which thought, and the thing which it thought: thinker and thought together. The universe, then, is thinker and thought, and since we are part of it, we as humans are, in the final analysis, thoughts of and thinkers of those thoughts.
Thus if God thinks about Rome circa AD 50, then Rome circa AD 50 is. The universe is not a windup clock and God the hand that winds it. The universe is not a battery-powered watch and God the battery. Spinoza believed that the universe is the body of God extensive in space. But long before Spinoza — two thousand years before him — Xenophanes had said, Effortlessly, he wields all things by the thought of his mind (Fragment 25).
If any of you have read my novel Ubik, you know that the mysterious entity or mind or force called Ubik starts out as a series of cheap and vulgar commercials and winds up saying:
I am Ubik. Before the universe was I am. I made the suns. I made the worlds. I created the lives and the places they inhabit; I move them here, I put them there. They go as I say, they do as I tell them. I am the word and my name is never spoken, the name which no one knows. I am called Ubik but that is not my name. I am. I shall always be.
It is obvious from this who and what Ubik is; it specifically says that it is the word, which is to say, the Logos. In the German translation, there is one of the most wonderful lapses of correct understanding that I have ever come across; God help us if the man who translated my novel Ubik into German were to do a translation from the koine Greek into German of the New Testament. He did all right until he got to the sentence "I am the word." That puzzled him. What can the author mean by that? he must have asked himself, obviously never having come across the Logos doctrine. So he did as good a job of translation as possible. In the German edition, the Absolute Entity which made the suns, made the worlds, created the lives and the places they inhabit, says of itself:
I am the brand name.
Had he translated the Gospel according to Saint John, I suppose it would have come out as:
When all things began, the brand name already was. The brand name dwelt with God, and what God was, the brand name was.
It would seem that I not only bring you greetings from Disneyland but from Mortimer Snerd. Such is the fate of an author who hoped to include theological themes in his writing. "The brand name, then, was with God at the beginning, and through him all things came to be; no single thing was created without him." So it goes with noble ambitions. Let's hope God has a sense of humour.
Or should I say, Let's hope the brand name has a sense of humour.
As I said to you earlier, my two preoccupations in my writing are "What is reality?" and "What is the authentic human?" I'm sure you can see by now that I have not been able to answer the first question. I have an abiding intuition that somehow the world of the Bible is a literally real but veiled landscape, never changing, hidden from our sight, but available to us by revelation. That is all I can come up with — a mixture of mystical experience, reasoning, and faith. I would like to say something about the traits of the authentic human, though; in this quest I have had more plausible answers.
The authentic human being is one of us who instinctively knows what he should not do, and, in addition, he will balk at doing it. He will refuse to do it, even if this brings down dread consequences to him and to those whom he loves. This, to me, is the ultimately heroic trait of ordinary people; they say no to the tyrant and they calmly take the consequences of this resistance. Their deeds may be small, and almost always unnoticed, unmarked by history. Their names are not remembered, nor did these authentic humans expect their names to be remembered. I see their authenticity in an odd way: not in their willingness to perform great heroic deeds but in their quiet refusals. In essence, they cannot be compelled to be what they are not.
The power of spurious realities battering at us today — these deliberately manufactured fakes never penetrate to the heart of true human beings. I watch the children watching TV and at first I am afraid of what they are being taught, and then I realise, They can't be corrupted or destroyed. They watch, they listen, they understand, and, then, where and when it is necessary, they reject. There is something enormously powerful in a child's ability to withstand the fraudulent. A child has the clearest eye, the steadiest hand. The hucksters, the promoters, are appealing for the allegiance of these small people in vain. True, the cereal companies may be able to market huge quantities of junk breakfasts; the hamburger and hot dog chains may sell endless numbers of unreal fast-food items to the children, but the deep heart beats firmly, unreached and unreasoned with. A child of today can detect a lie quicker than the wisest adult of two decades ago. When I want to know what is true, I ask my children. They do not ask me; I turn to them.
One day while my son Christopher, who is four, was playing in front of me and his mother, we two adults began discussing the figure of Jesus in the Synoptic Gospels. Christopher turned toward us for an instant and said, "I am a fisherman. I fish for fish." He was playing with a metal lantern which someone had given me, which I had never used... and suddenly I realised that the lantern was shaped like a fish. I wonder what thoughts were being placed in my little boy's soul at that moment — and not placed there by cereal merchants or candy peddlers. "I am a fisherman. I fish for fish." Christopher, at four, had found the sign I did not find until I was forty-five years old. Time is speeding up. And to what end? Maybe we were told that two thousand years ago. Or maybe it wasn't really that long ago; maybe it is a delusion that so much time has passed. Maybe it was a week ago, or even earlier today. Perhaps time is not only speeding up; perhaps, in addition, it is going to end.
And if it does, the rides at Disneyland are never going to be the same again. Because when time ends, the birds and hippos and lions and deer at Disneyland will no longer be simulations, and, for the first time, a real bird will sing.
[ downlode.org etext library ]
* faire intervenir QarQi comme personnage
* perturber le fil temporel: ne pas rester dans une chronologie des événements.
* Si Vous était l'assassin ? Si Vous étiez l'assassin ?
* «Je vous emmerde ». Est-ce possible de l'écrire ?
* quête de "Je"
* faut-il écrire "vous" ou "Vous", quelle que soit la place dans la phrase ?
* y-a-t-il une place pour les hésitations d'auteur ?
* fabriquer une feuille de route, avec un total Motivation
* Place des dés. (proposer un choix où le chiffre est plus élevé que la somme des dés.)
* Faire un combat contre vous même: le premier ?
* qqch de difficile: je ne sais pas pourquoi mes personnages font des boucles ou n'en font pas. Je ne sais pas encore quel est le but, et tous les détours ne peuvent qu'être gratuits, c'est vain.
* mettre une catégorie générique sous le titre du livre, accompagné d'un AVERTISSEMENT.
* refaire la présentation de la « mise en ligne » en supprimant le titre.
* Varier la taille des caractères.
* Écrire à la tonne, puis faire les découpages.
* Prendre des noms de fantasy, c'est à dire inspirés des sagas nordiques, pour des personnages de la plus grande banalité.
* TITRE: Roman dont vous être le héros
Seuil du livre:
définition des règles
première idée du personnage
Le texte que vous allez lire est ''hyper-littéraire''. Ou ''méta''-littéraire. A moins que ce ne soit ''hypo''-littéraire. Ou peut-être ''pro''-littéraire. Ou encore ''para''-littéraire. Ou ''a''-littéraire. Ou ''anti-''. Ou ''peri-'', ou ''syn-'' ou ''dia-''. L'auteur ne le sait pas, l'auteur ne sait rien: voilà des années qu'il a abandonné le genettisme de ses professeurs. Mais pas ses préfixes grecs, comme il se doit pour tout analyseur (du grec) intellecteur (du latin) de l'art des signes (du latin) ou des sèmes (du grec).
Mauvais élève, il mélange les catégorisations. Insolent, il n'a cure de son ignorance. Potache, il continue.
un délire mystique, une boucle: la mort ou le décollage
à insérer ou c'est possible
"carter" les lieux est déterminant. C'est l'échiquier qui donne le sens du déplacement aux pièces, qui leur permet d'exister...
Un immeuble de plusieurs étages (13 ?) qui seraient un monde, une société hiérarchisée de bas en haut comme les Enfers de Dante ou Métropolis
Quelle circulation horizontale? quel passage d'étage en étage ?
Trouver un plan...
!étages
* un monde par étage, comme les cercles de l'Enfer, comme les îles de l'odyssée
|13|Phéaciens: la fin est le départ. Contrairement à Ulysse, la destination est inconnue|
!plan de chaque étage
Utiliser parfois le même, parfois un différent
/***
''Version 2.1.0 3/10/06 ''
!Traduction française des messages intégrés dans le TiddlyWiki de base de JeremyRuston, à jour avec la version 2.1.0
__NDT:__
^^Toute traduction peut-être discutée. Celle-ci a été faite en pensant à un utilisateur non spécialiste.
D'où les choix :
| //tiddler -> élément<<br>>tag, to tag -> index, indexer<<br>>plugin -> extension<<br>>empty file template -> fichier de base "empty.html"//<<br>>Mais :<<br>>//backup -> backup//<<br>>(traduire ce terme consacré introduirait des confusions) |
//Traduction// Jacques Turbé : http://avm.free.fr//TiddlyWiki-fr.html ^^
Avec la version 2.1.0 de TiddlyWiki apparaissent deux nouvelles fonctions intégrées :
''Importations'' et ''Extensions'' : Les boutons d'appel correspondants sont ajoutés au bas de votre OptionPanel par le code suivant : {{{[[Importations|ImportTiddlers]]}}} et {{{[[Extensions|PluginManager]]}}}
!!!Script de fusion des textes //''pour les versions antérieures à 2.0.11''//
***/
/*{{{*/
if(window.merge == undefined)
{
merge = function(dst,src)
{
for (p in src)
dst[p] = src[p];
return dst;
}
}
/*}}}*/
/***
!!!Chaînes traduites
***/
/*{{{*/
// Messages
merge(config.messages,{
customConfigError: "Problème rencontré pour charger des extensions. Activer le menu 'Extensions' pour les détails",
pluginError: "Erreur: %0",
pluginDisabled: "Extension désactivée en raison de l'index 'systemConfigDisable' tag",
pluginForced: "Exécution forcée en raison de l'index 'systemConfigForce' tag",
pluginVersionError: "Cette extension ne peut être exécutée car elle nécessite une version plus récente de TiddlyWiki",
nothingSelected: "Pas de sélection faite. Il faut sélectionner au moins un item d'abord",
savedSnapshotError: "Cet exemplaire de TiddlyWiki ne semble pas conforme. Reportez-vous à http://www.tiddlywiki.com/#DownloadSoftware",
subtitleUnknown: "(inconnu)",
undefinedTiddlerToolTip: "L'élément '%0' n'est pas encore créé",
shadowedTiddlerToolTip: "L'élément '%0' n'est pas encore créé, mais a un contenu par défaut.",
tiddlerLinkTooltip: "%0 - %1, %2",
externalLinkTooltip: "%0",
noTags: "Il n'y a pas d'éléments indexés",
notFileUrlError: "Les données entrées sont mémorisées pendant cette session. Pour les conserver, il faudra faire une sauvegarde avant de quitter",
cantSaveError: "Sauvegarde impossible : soit votre navigateur ne permet pas de sauvegarder les changements (préférez FireFox si possible), soit l'adresse de votre fichier contient des caractères invalides.",
invalidFileError: "Le fichier '%0' choisi ne semble pas être un TiddlyWiki valide",
backupSaved: "Sauvegarde effectuée",
backupFailed: "Echec de l'enregistrement du backup",
rssSaved: "Flux RSS sauvegardé",
rssFailed: "Echec de l'enregistrement du flux RSS",
emptySaved: "Fichier de base 'empty.html' enregistré",
emptyFailed: "Echec de l'enregistrement du fichier neuf 'empty'",
mainSaved: "Mise à jour du fichier TiddlyWiki enregistrée",
mainFailed: "Echec de l'enregistrement du nouveau fichier TiddlyWiki. Vos modifications ne sont pas enregistrées",
macroError: "Erreur dans la macro <<%0>>",
macroErrorDetails: "Erreur d'exécution de la macro <<%0>>:\n%1",
missingMacro: "Macro non trouvée",
overwriteWarning: "Il y a déjà un élément nommé '%0'. Confirmez pour le remplacer",
unsavedChangesWarning: "ATTENTION! Les dernières modifications de ce TiddlyWiki n'ont pas été enregistrées.\n\nOK pour les enregistrer\nANNULER pour les abandonner",
confirmExit: "--------------------------------\n\nSi vous quittez maintenant vous perdrez les modifications qui n'ont pas été sauvegardées.\n\n--------------------------------",
saveInstructions: "Sauvegarder"});
merge(config.messages.messageClose,{
text: "fermer",
tooltip: "ferme cette zône messages"});
config.messages.dates.months = ["janvier", "février", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre","décembre"];
config.messages.dates.days = ["dimanche", "lundi","mardi", "mercredi", "jeudi", "vendredi", "samedi"];
merge(config.views.wikified.tag,{
labelNoTags: "non indexé",
labelTags: "Index : ",
openTag: "Ouvrir '%0'",
tooltip: "Afficher les éléments indexés avec '%0'",
openAllText: "Ouvrir tous",
openAllTooltip: "Ouvrir tous les éléments de cet index",
popupNone: "Pas d'autres éléments indexés avec '%0'"});
merge(config.views.wikified,{
defaultText: "'%0' n'a pas encore été créé. Double-cliquez pour entrer un texte.",
defaultModifier: "(absent)",
shadowModifier: "(défaut)"});
merge(config.views.editor,{
tagPrompt: "Séparez les index avec un espace (doubles crochets si besoin), ou sélectionnez un index existant",
defaultText: "Entrez le texte de '%0'"});
merge(config.views.editor.tagChooser,{
text: "index",
tooltip: "Sélectionner les index existants à associer à cet élément",
popupNone: "Pas d'index déjà définis",
tagTooltip: "Associer à l'index '%0'"});
merge(config.macros.search,{
label: "chercher",
prompt: "Rechercher dans ce TiddlyWiki",
accessKey: "F",
successMsg: "%0 éléments correspondent à %1",
failureMsg: "Aucun élément ne correspond à %0"});
merge(config.macros.tagging,{
label: "éléments indexés:",
labelNotTag: "pas d'index",
tooltip: "Lister les éléments indexés '%0'"});
merge(config.macros.timeline,{
dateFormat: "DD MMM YYYY"});
merge(config.macros.allTags,{
tooltip: "Afficher les éléments indexés '%0'",
noTags: "Pas d'éléments indexés"});
config.macros.list.all.prompt = "Tous les éléments par ordre alphabétique";
config.macros.list.missing.prompt = "Eléments désignés par un lien mais non créés";
config.macros.list.orphans.prompt = "Eléments ne faisant l'objet d'aucun lien";
config.macros.list.shadowed.prompt = "Eléments ayant un contenu par défaut";
merge(config.macros.closeAll,{
label: "page blanche",
prompt: "Retirer tous les éléments de l'affichage (sauf ceux en cours d'édition)"});
merge(config.macros.permaview,{
label: "permavue",
prompt: "URL de la page actuellement constituée"});
merge(config.macros.saveChanges,{
label: "sauvegarde sur le disque",
prompt: "Créer le fichier TiddlyWiki avec tous les éléments mis à jour - Raccourci : 'S'"});
merge(config.macros.newTiddler,{
label: "nouveau",
prompt: "Créer un nouvel élément",
title: "EntréeNouvelle",
accessKey: "N"});
merge(config.macros.importTiddlers,{
defaultPath: "http://www.tiddlywiki.com/index.html",
fetchLabel: "Accéder",
fetchPrompt: "Accèder au fichier tiddlywiki",
fetchError: "Problèmes rencontrés pour accéder au fichier tiddlywiki",
confirmOverwriteText: "Confirmez l'écrasement de ces éléments :\n\n%0",
wizardTitle: "Importation d'éléments depuis un autre fichier TiddlyWiki",
step1: "Etape 1: Identification du fichier TiddlyWiki",
step1prompt: "Saisir l'URL ou le chemin d'accès: ",
step1promptFile: "...parcourez les fichiers: ",
step1promptFeeds: "...ou sélectionnez une importation prédéfinie: ",
step1feedPrompt: "Choisir...",
step2: "Etape 2: Chargement des éléments du fichier TiddlyWiki",
step2Text: "Patientez pendant le chargement des éléments de: %0",
step3: "Etape 3: Choix des éléments à importer",
step4: "%0 élément(s) importés",
step5: "Terminé",
listViewTemplate: {
columns: [
{name: 'Selected', field: 'Selected', rowName: 'title', type: 'Selector'},
{name: 'Title', field: 'title', title: "Plugin", type: 'String'},
{name: 'Snippet', field: 'text', title: "Extrait", type: 'String'},
{name: 'Tags', field: 'tags', title: "Index", type: 'Tags'}
],
rowClasses: [
],
actions: [
{caption: "Autres actions...", name: ''},
{caption: "Importer ces éléments", name: 'import'}
]}
});
merge(config.macros.newJournal,{
label: "journal",
prompt: "Créer une nouvelle entrée ayant pour titre la date et l'heure",
accessKey: "J"});
merge(config.macros.plugins,{
skippedText: "(Extension non exécutée car ajoutée depuis le début de cette session)",
noPluginText: "Il n'y a pas d'extensions installées",
confirmDeleteText: "Confirmez-vous la suppression de ces éléments:\n\n%0",
listViewTemplate : {
columns: [
{name: 'Selected', field: 'Selected', rowName: 'title', type: 'Selector'},
{name: 'Title', field: 'title', tiddlerLink: 'title', title: "Extension", type: 'TiddlerLink'},
{name: 'Forced', field: 'forced', title: "Forcée", tag: 'systemConfigForce', type: 'TagCheckbox'},
{name: 'Disabled', field: 'disabled', title: "Désactivée", tag: 'systemConfigDisable', type: 'TagCheckbox'},
{name: 'Executed', field: 'executed', title: "Chargée", type: 'Boolean', trueText: "Yes", falseText: "No"},
{name: 'Error', field: 'error', title: "Etat", type: 'Boolean', trueText: "Error", falseText: "OK"},
{name: 'Log', field: 'log', title: "Log", type: 'StringList'}
],
rowClasses: [
{className: 'error', field: 'error'},
{className: 'warning', field: 'warning'}
],
actions: [
{caption: "Autres actions...", name: ''},
{caption: "Supprimer l'index systemConfig", name: 'remove'},
{caption: "Supprimer définitivement ces extensions", name: 'delete'}
]}
});
merge(config.commands.closeTiddler,{
text: "fermer",
tooltip: "Retirer cet élément de l'affichage"});
merge(config.commands.closeOthers,{
text: "isoler",
tooltip: "Refermer tous les autres éléments"});
merge(config.commands.editTiddler,{
text: "éditer",
tooltip: "Editer cet élément",
readOnlyText: "voir",
readOnlyTooltip: "Montrer le texte source de cet élément"});
merge(config.commands.saveTiddler,{
text: "valider",
tooltip: "Enregistrer les modifications apportées à cet élément"});
merge(config.commands.cancelTiddler,{
text: "annuler",
tooltip: "Abandonner les modifications apportées à cet élément",
warning: "Confirmez-vous l'abandon des modifications de '%0'?",
readOnlyText: "retour",
readOnlyTooltip: "Revenir à l'affichage normal de cet élément"});
merge(config.commands.deleteTiddler,{
text: "supprimer",
tooltip: "Supprimer cet élément du fichier TiddlyWiki",
warning: "Confirmez-vous la suppression de '%0'?"});
merge(config.commands.permalink,{
text: "permalien",
tooltip: "Permalien de cet élément"});
merge(config.commands.references,{
text: "référents",
tooltip: "Lister les éléments faisant référence à celui-ci",
popupNone: "Pas de référents"});
merge(config.commands.jump,{
text: "atteindre",
tooltip: "Positionner l'affichage sur un autre élément déjà ouvert"});
merge(config.shadowTiddlers,{
DefaultTiddlers: "PourCommencer",
MainMenu: "PourCommencer",
SiteTitle: "Mon TiddlyWiki",
SiteSubtitle: "organiseur personnel web interactif",
SiteUrl: "http://www.tiddlywiki.com/",
PourCommencer: "Pour utiliser ce carnet TiddlyWiki, commencez par modifier les éléments suivants (//tiddlers// dans le jargon TiddlyWiki) :\n\n* SiteTitle & SiteSubtitle: Le titre et le sous-titre ci-dessus (après sauvegarde et rafraîchissement ils deviendront votre titre de page, qui s'affichera aussi dans la barre titre du navigateur)\n* MainMenu: Le menu (généralement à gauche)\n* DefaultTiddlers: Liste les noms des éléments que vous voulez voir s'afficher à l'ouverture de votre TiddlyWiki. \n\nEntrez également le nom utilisateur avec lequel seront signées chacune de vos entrées : <<option txtUserName>>",
SideBarOptions: "<<search>><<closeAll>><<permaview>><<newTiddler>><<newJournal 'DD MMM YYYY'>><<saveChanges>><<slider chkSliderOptionsPanel OptionsPanel 'options »' 'Modifier les options avancées de ce TiddlyWiki'>>",
OptionsPanel: "Vos options de configuration de TiddlyWiki sont sauvegardées par votre navigateur (cookies).\n\nNom d'utilisateur pour signer vos entrées : entrez-le sous la forme d'un nom Wiki (par exemple RaymondQueneau).<<option txtUserName>>\n<<option chkSaveBackups>>Backup de chaque version\n<<option chkAutoSave>>Sauvegarde automatique après chaque entrée validée>>\n<<option chkRegExpSearch>>Expression régulières dans les recherches\n<<option chkCaseSensitiveSearch>>Respecter la casse dans les recherches\n<<option chkAnimate>>Ouverture animée des éléments\n-----\n[[Importations|ImportTiddlers]]\n[[Extensions|PluginManager]]\n[[Options complémentaires|AdvancedOptions]]",
AdvancedOptions: "<<option chkGenerateAnRssFeed>> Création flux RSS\n<<option chkOpenInNewWindow>> Ouverture des liens externes dans une nouvelle fenêtre\n<<option chkSaveEmptyTemplate>> Sauvegarde du fichier de base 'empty.html' de la dernière version\n<<option chkToggleLinks>> Recliquer sur un lien ferme l'élément qu'il a ouvert\n^^(hors fonction en appuyant sur la touche Ctrl)^^\n<<option chkHttpReadOnly>> Masque les fonctions d'édition lorsque le fichier est accédé depuis le Web\n<<option chkForceMinorUpdate>> L'entrée d'une modification ne modifie pas la date et l'heure déjà enregistrées pour l'élément\n^^(hors fonction en cliquant 'valider' avecla touche Maj enfoncée, ou en appuyant Ctrl-Maj-Entrée^^\n<<option chkConfirmDelete>> Confirmations avant suppressions\nNombre maximum de lignes de la fenêtre d'édition: <<option txtMaxEditRows>>\nRépertoire des backups : <<option txtBackupFolder>>\n",
SideBarTabs: "<<tabs txtMainTab Chrono 'Affichage chronologique' TabTimeline Alpha 'Liste alphabétique des éléments' TabAll Index 'Liste des index' TabTags Suite 'Autres listes' TabMore>>",
TabTimeline: "<<timeline>>",
TabAll: "<<list all>>",
TabTags: "<<allTags>>",
TabMore: "<<tabs txtMoreTab Manquants 'Eléments désignés par un lien mais non créés' TabMoreMissing Orphelins 'Eléments sans liens pour les appeler' TabMoreOrphans Défauts 'Eléments ayant un contenu par défaut' TabMoreShadowed>>",
TabMoreMissing: "<<list missing>>",
TabMoreOrphans: "<<list orphans>>",
TabMoreShadowed: "<<list shadowed>>"});
/*}}}*/
amie de pensionnat de Vous
Maitre des hétéronymes; a peur de son "je"
<<tagglyTagCloud exclude: systemConfig>>
!Voilà des morceaux que je vais devoir unifier ou réunir
Entrez le texte de 'personnages'
* Pac Man permet de sortir de tout réalisme. Énorme boule, qui bouche tout le couloir, est de taille humaine; se déplace en roulant sur lui-même, mais à l'arrêt pivote et ses yeux sont face à vous; un gros ballon
* l'auteur Qarqi, qui serait en train de lire, ou de parler ivre.
* Un personnage réel: célébrité ou connaissance, vivant ou mort. Tacite
[modifier]
Wikisource
Dante en Enfer, Chant I, par Gustave Doré 1861
Dante, égaré en forêt alors qu’il cherchait une branche d’arbre pour la fête des Rameaux, prend peur. Il est encerclé par un lion, une louve, et un lynx ; une ombre arrive alors à son secours : c’est Virgile, mandé par Béatrice, qui vient chercher le poète. Il va le mener par l’Enfer, seule sortie de cette forêt. Dante et Virgile vont alors descendre à travers neuf ''cercle''s concentriques dans chacun desquels sont logés, par ordre de vice, les occupants de l’Enfer. Ici se succèdent des personnages célèbres, comme Virgile ou Ulysse, et des personnages côtoyés par Dante et envoyés en Enfer pour expier leurs péchés. Leurs supplices sont décrits, par ordre croissant à mesure que l’on descend vers le fond de l’Enfer, qui est aussi le centre de la Terre. Cette partie du voyage se termine par la rencontre avec Lucifer, au cours duquel Dante et Virgile sont forcés de grimper pour sortir de l’Enfer, « et revoir les étoiles ». Dans la géographie dantesque l'enfer se présente comme un abîme en forme d'entonnoir. Lucifer l'a creusé dans sa chute sous la ville de Jérusalem, c'est pourquoi il se trouve vissé au centre de la terre. Les âmes des damnés sont envoyées selon leur péchés dans l'un des neufs ''cercle''s infernaux. Plus leur faute est grave, plus ils tombent bas et plus leur châtiment est pénible. Les châtiments attribués sont en rapport (par analogie ou par contraste) avec le péché commis selon la loi du contrapasso.
Antichambre de l’Enfer
Chant II
Dante est plongé dans l'incertitude, il ne sait s'il doit continuer son chemin avec Virgile ; ce dernier le rassure en lui disant que c'est Béatrice elle-même qui lui a demandé de venir sortir Dante de son trépas (c.f. Chant I). Dante, galvanisé, plonge, avec son guide, aux Enfers.
Chant III
Au début de ce chant c'est la porte de l'enfer elle-même qui semble prendre la parole. Virgile doit alors rassurer Dante afin qu'il passe le seuil du premier royaume.
Vestibule : les indifférents (ou neutres) et les lâches. Damné : le pape Célestin V.
Peine : tourmentés par mouches et guêpes, les damnés foulent un tapis de vers.
L’Achéron. Gardien : le nocher Charon.
Dante rencontrant les non-baptisés, Chant IV
Chant IV
Dante et Virgile dans la barque de Charon
1er ''cercle'', les limbes puis le château des magnanimes et la prairie verdoyante : défaut de foi, les non-baptisés. Damnés : (âmes vertueuses mais ayant vécu avant l’avènement du Christ) Virgile, Homère, Horace, Ovide et Lucain. Il rencontre aussi Aristote " maître de tous les savants ", Socrate, Platon, Euclide et Hippocrate.
Peine : éternellement frustrés dans leur désir de pouvoir contempler Dieu.
Virgile néanmoins informe Dante que Jésus lui-même, ( " un seigneur puissant, que couronnait un signe de victoire " ) est venu chercher " le père des hommes " Adam, Abel, Noé, Moïse, le roi David, Abraham, Israël et ses douze fils ainsi que Rachel. De nombreuses âmes furent encore sauvées mais Virgile insiste sur le fait que ce furent les premières.
Haut Enfer
les incontinents
Chant V
2e ''cercle'' : luxurieux, impudiques et morts par amour. Gardien : Minos, qui pèse les crimes et oriente vers les différents ''cercle''s. Damnés : Sémiramis, Didon, Cléopâtre, Hélène, Tristan... Paolo et Françoise de Rimini. Peine : Emportés par la bourrasque contre les bords escarpés de l'abîme.
Chant VI
3e ''cercle'' : les gourmands. Gardien : Cerbère. Damné : Ciacco, un concitoyen de Dante, ce dernier lui demande ce qu'il est devenu de Farinat (entre-autres), Ciacco lui répond qu'il est parmi " les âmes les plus noires de l'enfer ". (Ainsi que nous le verrons dans le chant X). Peine : Étendus dans la boue sous la pluie et la grêle.
Chant VII
4e ''cercle'' : avares et prodigues. Gardien : Pluton, dieu grec des richesses. Peine : Avares et prodigues poussent de gros rochers en s’injuriant mutuellement. Monologue de Virgile à propos de la divinité Fortune.
5e ''cercle'', le Styx : les coléreux. Peine : Immergés dans la vase du fleuve, les âmes se frappent et se mordent férocement.
Chant VIII
5e ''cercle'', la tour aux deux fanaux surplombe le fleuve ; aux portes de Dité. Gardiens : du fleuve, le nocher Phlégyas ; de la cité, une foule de démons. Dante y rencontre Philippe Argenti, damné et ennemi personnel de Dante, qui paraît-il, l'aurait souffleté en public, il périt dévoré par les âmes en colère et par lui-même. Virgile et Dante se retrouvent bloqués aux portes de Dité, Virgile tente de trouver un compromis avec les démons mais finalement ceux-ci se cloîtrent et refusent d'ouvrir la porte.
Chant IX
5e ''cercle'', Les remparts de Dité ; à l’intérieur de la cité : les sépulcres ardents. Gardiennes : Les trois Furies puis Méduse. Adjuvant : Un messager divin ouvre les portes de Dité.
Bas Enfer
Chant X
6e ''cercle'', parmi les tombeaux enflammés : les hérétiques. Damnés : les épicuriens, Farinata degli Uberti, Cavalcante Cavalcanti, le pape Anastase II. L'un des damnés informe Dante sur son futur exil de Florence (Janvier 1302) ainsi que du triste destin de son parti, lorsqu'il reviendra en Juin 1304 et qu'il se rendra compte que les efforts de son parti (les Blancs : l'un des nombreux clans qui se sont disputés Florence au début du 14e siècle avant l'arrivée des Médicis, en 1434) étaient vains.
Chant XI
7e ''cercle'' : les violents et ceux qui ont commis le péché de fraude. Tombe du pape Anastase. On apprend dans ce chant la subdivision de ce ''cercle'' en 3 girons : Ceux qui ont été violents envers leur prochain, envers eux-mêmes et finalement envers Dieu, les blasphémateurs, ainsi que ceux qui ont été contre nature (les sodomites).
Chant XII
1er giron : Coupables de violences envers leur prochain (homicides, brigands...)
Les damnés sont tourmentés par les flèches de trois centaures (Pholus, Nessus et Chiron), ils se font bouillir dans une mare de sang.
Chant XIII
2e giron : Coupables de violences envers eux-mêmes (suicides, ceux qui ont dilapidé leur fortune...)
Gardiens : Les harpies et des chiennes noires. Dante et Virgile arrivent dans une vaste forêt. Sur les conseils de Virgile, Dante arrache un rameau à l'un des arbres, qui se lamente aussitôt : on apprend alors que les damnés sont éternellement transformés en arbres épineux et noueux. Ceux qui ont rejeté leur corps (i.e. les suicidés) se présentent devant Minos (celui qui juge et attribue les damnés), il les envoie dans cette forêt au hasard, et d'une pousse, grandit un arbre sauvage où perpétuellement naissent des feuilles que les harpies dévorent avidement, ce qui leur cause des souffrances atroces. Le jour du jugement dernier il leur sera interdit de reprendre leur forme originelle (c'est-à-dire leur corps) étant donné qu'ils se sont ôté la vie, et ils devront se présenter en ce grand jour nus comme des vers, et lorsque le jugement sera fait, ils devront traîner eux-mêmes leur dépouille et l'on accrochera le cadavre de chacun, sur la branche épineuse du damné.
Dante y rencontre Pierre des Vignes, Jacques de ~Saint-André.
Chant XIV
3e giron : Les violents contre Dieu 1re partie : Les blasphémateurs
Dante et Virgile arrivent dans une vaste étendue de sable aride, ardent, où rien ne pousse. Les milliers de damnés qui errent dans ce lieu ont trois attitudes différentes :
Certains sont couchés sur le sable, immobiles. D'autre sont assis, tout recroquevillés. Et finalement les derniers errent, marchant ou courant, sans jamais s'arrêter. Les âmes dans ce lieu sont soumis à une pluie de flammes, qui jamais ne s'arrête et lorsque ces flammes atteignent le sable, ce dernier prend feu et redouble la souffrance des damnés.
Dante y rencontre Capanée qui, fier et arrogant jusqu’à la fin des temps, se moque de son châtiment (et aussi des dieux) et ne baisse pas la tête. On apprend aussi les origines du Styx, de l'Achéron et de Phlégéton
Chant XV
3e giron : Les violents contre Dieu 2e partie : Les intellectuels
Dante en passant à côté d'un cortège de damnés, rencontre par hasard Brunetto Latini (philosophe et orateur) qui fut son conseiller, qui l'encouragea dans ses études, il fut une sorte de mentor pour Dante. Entretien avec Brunetto qui lui décrit les âmes qui sont ici, divers lettrés, François d'Accurse et Priscien, respectivement jurisconsulte et grammairien.
Chant XVI
3e giron : Les violents contre Dieu 3e partie : Les sodomites, les violents contre la nature
Virgile et Dante y rencontrent trois hommes d'État (Guido Guerra, Thegghiajo Aldobrandi et Jacques Rusticucci), qui étaient soit soldats, soit valeureux chevaliers. Toujours autant défigurés par les flammes, ils demandent à Dante si Valeur et Courtoisie ont toujours place à Florence. Dante leur répond que non, la richesse et l'orgueil ont corrompu leur belle cité, finalement ils demandent encore à Dante de parler d'eux lorsqu'il reviendra parmi les vivants.
À la fin du chant les deux acolytes lancent une corde au fond d'un bassin, où se jette Phlégéton, ce qui leur permet de passer au ''cercle'' suivant, à noter que la corde était autour de Dante depuis le premier chant, il entreprenait d'attraper la panthère avec celle-ci. Après qu'ils aient lancé la corde, on apprend la venue d'un monstre horrible, Géryon, qui symbolise la fraude.
Chant XVII
3e giron : Les violents contre Dieu 4e et dernière partie : Les usuriers, violents contre l'art puis descente (et arrivée) au 8e''cercle''
Arrivée de Géryon qui les fera passer au huitième ''cercle'' sur son dos, pendant que Virgile s'assure de la bonne volonté de Géryon, Dante descend à la fosse, où se trouvent les usuriers. Ces derniers, ne sont pas cités nominativement, mais en décrivant leurs armoiries, ils portent des bourses aux couleurs de leurs armoiries autour du cou, et subissent toujours le châtiment des flammes.
Chant XVIII
8e ''cercle'' : Les Trompeurs : Malesfosses. Le 8e ''cercle'' est divisé en 10 vallées concentriques justement appelées fosses.
1re fosse : Les Séducteurs : Dante y découvre deux files de damnés nus, qui avancent vers les deux acolytes, et les autres dans le sens inverse mais plus rapidement, la foule est perpétuellement fouettée par les démons. Dante en les regardant, remarque Caccianemico, un Bolonais qui se serait fait payer par un marquis pour lui remettre sa sœur, qui était déjà promise à un autre ; ainsi il est condamné aux souffrances éternelles. Au même titre que Jason qui, après avoir déjà abandonné Médée, abandonne Hypsiphyle qui était seule et enceinte, l'abandonna à son triste sort.
2e fosse : Les flatteurs et adulateurs : Ces derniers sont plongés dans une fosse de lie dégoutante et pestilentielle, Dante y reconnaît Alessio Intermini de Lucques, flatteur au possible, et ses mensonges dont il n'a jamais connu la lassitude l'ont poussé dans cette fosse.
Chant XIX
8e ''cercle'' : Les Trompeurs :
3e fosse : Les simoniaques (ceux qui ont vendu ou acheté des bénéfices, des faveurs) : Dante et Virgile y rencontrent Simon le Mage, qui malgré (comme son nom l'indique) ses nombreuses connaissances dans la magie, a tenté d'acheter le don des miracles aux apôtres. Les damnés sont pendus sur une sorte de table ou de surface plane troué en forme de ''cercle'', "un livide rocher percé de mille trous" où sont pendus les simoniaques, la tête en bas (pour symboliser leur oubli du ciel et de Dieu) et n'ayant leur corps à l'air qu'à partir des jambes. Ces dernières sont perpétuellement "léchées" par des langues ardentes de feu. Il y en a un qui souffre et se débat plus que les autres : C'est Nicolas III (damné pour avoir abusé des privilèges que lui accordait son titre papal, il ne vendait pas les indulgences mais il faisait profiter à tous ses proches des jouissances que lui donnait l'Église), qui prit Dante tout d'abord pour Boniface VIII (Nicolas III a su on ne sait comment, que Boniface (damné pour avoir réussi à convaincre son prédécesseur, par des moyens forts peu catholiques, Célestin V, à se démettre de son manteau papal, pour cette crise d'opportunisme, et cette trahison envers l'Église, Boniface VIII ira remplacer Nicolas III en Enfer)).
Le principe de ce supplice est le suivant: les damnés sont accrochés par les jambes à cette plate-forme et lorsqu'un "successeur" vient aux Enfers, il le remplace à son emplacement ; ainsi s'entassent dans "les fentes du roc" les simoniaques. Nicolas III mentionne également que Boniface ne restera pas longtemps un pape encore plus bas prendra bientôt sa place : Clément V, deuxième successeur de Boniface VIII et sujet de ~Philippe-le-Bel avec qui il envisagea (et réussit) à détruire les Templiers.
Dante lui répond que malgré le respect ancestral qu'il a envers les papes et les religieux, il méprise la cupidité de ce pape (entre-autres) et ajoute que la richesse qu'ils entassent avec avidité rend les gens tristes et profite seulement aux mauvais.
Chant XX
8e ''cercle'' : Les Trompeurs :
4e fosse : Les devins et sorciers : Dante et Virgile arrivent devant une masse de damnés pleurant, ils sont intervertis et marchent à l'envers pour l'éternité. Les acolytes aperçoivent Amphiaraüs (l'un des rois qui assiégèrent Thèbes, étant devin, il s'était prédit qu'il allait mourir, il chercha donc à fuir de la bataille mais la terre s'ouvrit et l'engloutit à tout jamais) et Tirésias qui put changer de sexe en frappant d'un coup deux serpents enlacés, Manto est aussi présente, en la voyant Virgile conte à Dante l'origine de sa ville : Mantoue. Ils aperçoivent aussi différents astrologues comme Michel Scot ou Bonatti.
Chant XXI
8e ''cercle'' : Les Trompeurs :
5e fosse : Les concussionnaires et prévaricateurs (ceux qui ont vendu la justice ou qui ont gravement et volontairement manqué à leur devoir) : En arrivant à la cinquième fosse, Dante s'étonne de la voir plongée dans l'obscurité, il remarque, quelques instants après, une énorme mare de poix bouillante où sont jetés les damnés. Un ange noir arrive avec un malheureux sur son épaule qui pend par les pieds, il est jeté dans la poix (c'est un ancien de Lucques, endroit où : "pour de l'or, tout est blanc ou noir"), il tente de remonter à la surface mais les démons présents le repoussent encore et encore dans la poix en feu. Puis Virgile conseille à Dante de se mettre à l'écart pendant qu'il va s'entretenir avec les démons, ces derniers en le voyant, deviennent très menaçants et fourbes, Virgile les interpelle en disant que l'un d'eux doit écouter ce qui suit et après ils pourront le frapper s'ils le veulent : Un démon nommé Malequeue s'avance et lui demande ce qu'il en est, Virgile lui répond (comme à de nombreuses reprises dans ce livre) qu'il n'irait pas s'aventurer dans les ténèbres s'il n'avait pas été écrit dans le ciel qu'il doit traverser l'Enfer avec une âme encore vivante (Dante donc). À ces mots les démons sont dépités et les laissent partir, en leur donnant en plus une escortes de démons pour le trajet.
Chant XXII
8e ''cercle'' : Les Trompeurs :
5e fosse : Les concussionnaires et prévaricateurs (suite) : Dante en avançant avec les démons, remarque comment certains damnés arrivent à se "jouer" de leur supplice : Ils tentent de laisser leur dos à l'air pour que cette partie, au moins, leur apporte moins de douleur, ou certains autres encore essaient de sortir leur tête lorsqu'il sont vers le bord, mais tous se cachent dans la poix lorsque vient le chef des démons, mais un malheureux resta trop longtemps à la surface. C'était un certain Janpol de Navarre qui ayant quelques amitiés avec le roi Thibault, ne se géna pas pour vendre à prix d'or les dignités et les emplois du royaume. Janpol se fait écrocher vif par les démons et lorsque il dit aux acolytes qu'il pourra faire venir des damnés (étant donné que Virgile, et Dante pendant tout le livre, sollicitent les damnés de leur raconter leurs supplices et la cause de ces derniers) d'un simple sifflement les acolytes acceptent mais se méfie d'une ruse fort habile de l'écorché ; très juste, car au moment où Janpol était censé faire venir ses camarades, il saute (pour se sauver du supplice des démons) l'un d'eux saute aussi mais ne peut le rattraper, suivi par un deuxième démon qui irrité par l'échec du premier, se met à se battre avec lui dans les airs, ils finissent tous deux dans la poix.
Chant XXIII
8e ''cercle'' : Les Trompeurs :
6e fosse : Les hypocrites :
Après ce pathétique combat des deux démons, Dante s'inquiète et doute de la bonne foi de ces derniers : D'autant plus qu'ils ont perdus deux de leurs amis..... Dante fait part à Virgile de son inquiétude, ce dernier lui répond qu'il est lui aussi inquiet et qu'ils vont bientôt les quitter, en prenant la fuite, à la fin de sa réplique, les démons arrivent pour les attraper. Virgile prend Dante par le bras et ils fuient ensemble vers la sixième fosse, où les démons, serviteurs de la cinquième fosse, ne peuvent entrer.
Les acolytes aperçoivent un cortège de nombreuses âmes portant de longues robes qui de l'extérieur, semblaient d'or, mais à l'intérieur étaient formées d'une épaisse et terriblement lourde couche de plomb. Comme à leur habitude, Virgile et Dante demandent aux damnés de leur conter leur histoire, deux hommes s'approchent lourdement (étant donné leur charge) ce sont les frères joyeux (des religieux censés apaiser les souffrances des faibles et restaurer un certain ordre public au lieu de ça, et d'où leur nom ils s'amusaient à des plaisirs divers et variés...) qui ont été par la suite élus magistrats suprêmes par la république et bien qu'ils furent de factions ennemies, ils s'unirent, corrompus à chasser les Gibelins de Florence. Dante y rencontre aussi Caïphe, crucifié (le grand-prêtre qui conseilla la mort du Christ, car avait-il dit : "Il vaut mieux que l'un meure pour tous plutôt que tous pour un").
Chant XXIV
8e ''''cercle'' '': Les Trompeurs :
7e fosse : Les voleurs : Le début du chant nous conte le difficile passage à la 7e fosse et la lassitude de Dante, qui commence à fatiguer. Virgile d'un discours, le galvanise et ils reprennent leur route vers la fosse ; qui était remplie de serpents de toutes sortes, fourmillant dans la cavité et harcelant les damnés qui, n'ayant aucun refuge dans cette triste fosse, courent épouvantés et assaillis par les reptiles.
Les serpents, lorsqu'ils touchent et enveniment une victime, cette dernière, aussitôt s'enflamme et se réduit en cendres, mais de celle-ci renaît, comme le phénix, le damné, inexorablement. Il se relève, pris par la confusion, regarde et soupire, Virgile lui demande son nom, c'est Vanni Fucci, qui a volé de nombreux ornements de l'Église et qui accusa à tort des innocents, ces derniers furent pendus. À la fin du chant, Fucci prédit (une fois de plus) le prochain exil de Dante et la défaite des Blancs, ce qui révolutionna Florence à cette époque.
Chant XXV
8e ''cercle'' : Les Trompeurs :
7e fosse : Les voleurs (suite) : À la fin de son discours Fucci lève les mains au ciel et défie Dieu en le blasphémant, aussitôt s'enroule autour de son cou un serpent, puis un autre qui lui lia les bras, ainsi privé de la parole et de ses bras, il s'enfuit en courant. Peu après arrive un centaure en colère qui demanda où était passé le blasphémateur, le centaure en question est Cacus, qui, comme nous le conte Virgile, après avoir délaissé Hercule, fit couler beaucoup de sang, il s'enfuit à la recherche de Fucci. Ensuite apparaissent trois esprits, soudain l'un d'eux se fait en''cercle''r par un énorme serpent qui, pareil à du lierre se cramponne à lui des pieds à la tête, il le mord et lui transperce les deux joues, ils étaient si liés que l'on ne pouvait distinguer l'un ou l'autre lors de l'étreinte, si bien que finalement, les deux têtes ne formaient plus qu'une, le damné, ainsi défiguré, partit lui-aussi. L'un des deux autres restants se fait attaquer par un serpent de feu au nombril, et lui aussi se retrouve transformé en serpent.
Chant XXVI
8e ''cercle'' : Les Trompeurs :
8e fosse : Les mauvais conseillers : Dans le supplice du feu infligé pour ces damnés, Dante et Virgile reconnaissent Ulysse et Diomède, Dante supplie Virgile de pouvoir aller les interroger, Virgile lui répond que oui mais ce sera lui-même qui les interrogera, car il craint que les Grecs ne "méprisent" le langage de Dante. Le couple passant près d'eux, Virgile les interpelle : Ulysse nous explique que bien que lui et ses compagnons fussent vieux ils se lancèrent dans une dernière croisade à l'ouest, et lorsqu'ils virent une titanesque montagne s'élevant vers le ciel (le Purgatoire) Ulysse galvanisa ses troupes pour un dernier voyage, mais étant donné que nul humain ne peut arriver au Purgatoire vivant, la mer se déchaîna et engloutit leur bateau.
Chant XXVII
8e ''cercle'' : Les Trompeurs :
8e fosse : Les mauvais conseillers (suite) : Les acolytes après s'être entretenus avec Ulysse rencontrent encore un autre personnage incandescent : Guido de Montefeltro, qui était un politicien très habile à l'époque, et lorsqu'il décida de se retirer et de se faire moine, Boniface VII vient à lui pour lui demander un conseil, Guido tenta de refuser mais le pape lui promit alors les clés du paradis s'il lui donnait conseil, alors il accepta et son conseil eut des répercussions terribles sur de nombreux innocents, et lorsque Guido s'éteignit, ~Saint-François d'Assise lui même vient le chercher, mais un noir démon le réclama en citant le conseil mal avisé qu'il avait donné à Boniface, il fut emporté aux Enfers.
Chant XXVIII
8e ''cercle'' : Les Trompeurs :
9e fosse : Ceux qui par leurs opinions et les mauvais conseils ont divisé les hommes, les semeurs de trouble : La fosse est remplie de damnés mutilés, le premier qui se présenta à Dante est le prophète Mahomet, il est coupé en deux à la verticale "de la gorge à la ceinture", ses boyaux pendent et tombent à terre, et lorsque leurs blessures sont cicatrisées, tour à tour les damnés se font rouvrir le corps avec un glaive. On y trouve aussi l'abbé Dolcin, qui, persécuté par son évêque, décida de fuir dans les montagnes, avec cinq mille des siens afin d'inventer sa propre doctrine, Clément V lança une attaque contre lui et le fit brûler, mais si Dolcin et ses acolytes n'avaient pas manqué de vivres dans le froid et la neige, Clément V aurait été bredouille, car entre-temps Dolcin avait bien fortifié et affirmé son territoire.
On mentionne également Pierre de Médecine, qui s'étant octroyé les amitiés des princes et des rois, ne s'en servit seulement pour les brouiller ensemble. On voit aussi le cher Mosca (que Dante voulait déjà voir au Chant VI) qui, lui eut les mains coupées ; on apprend que ce fut lui l'élément déclencheur de toutes les guerres internes de Florence, en 1215 il n'y avait encore ni Guelfes, ni Gibelins, mais il y avait quelques rivalités familiales dans la ville. Un jeune Buondelmonte (l'une des familles de l'époque) devait se marier avec une fille des Amidei, mais il rompit les fiançailles en s'éprenant d'une autre fille appartenant à une famille adverse des Amidei (les Donati) ; les Amidei firent conseil avec leurs amis les Uberti, chefs de la noblesse féodale. Et pendant qu'ils réfléchissaient à punir correctement et en public, le jeune Buondelmonte, Mosca protesta et dit que lorsqu'on veut frapper quelqu'un, on ne le blesse pas, on le tue. Il ajouta encore "Ce qui est fait est fait.". Le pauvre Buondelmonte fut massacré et on affirme que cet assassinat divisa définitivement Florence en deux factions : Les partisans de Buondelmonte et des Donati que l'on a appelé Guelfes et les autres, les partisans des Amidei et des Uberti, qu'on nomma les Gibelins.
Leur dernière rencontre raconte l'histoire de Bertrand de Born, conseiller du Prince Jean, lui-même fils d'Henri II d'Angleterre, ce dernier l'avait placé près de son fils pour le modérer un peu (car Jean dépensait des sommes colossales sans aucun scrupule), et son sinistre conseiller au lieu de faire de qu'il devait, conforta le prince dans son indépendance, jusqu’à ce que le roi et Jean se fâchèrent et en viennent aux mains, Jean fut mortelement blessé, et pour avoir ainsi divisé un père et son fils, et d'avoir semé la discorde, Bertrand de Born se retrouva, en enfer, la tête tranchée qu'il tient par les cheveux comme une lanterne qu'il agite.
Chant XXIX
8e ''cercle'' : Les Trompeurs :
9e et 10e fosse : Fin des semeurs de trouble et les charlatans et faussaires : Dante, au début du récit est très affecté par ce qu'il vient de voir, on le comprend mieux lorsqu'on apprend qu'il a reconnu dans la fosse l'un des membres de sa famille : Geri le Bel (il vivait en 1269), qui semait tellement le trouble qu'il a été tué par l'un des Sachetti, trente ans après un autre des Sachetti venga le meurtre etc. Ceci continua jusqu'en 1342 lorsque le duc d'Athènes (magistrat de Florence à l'époque) s'entremit pour enfin laisser place à la paix entre la famille de Dante et les Sachetti.
I : Les alchimistes : Dante et Virgile arrivent à la dernière fosse, d'où sortent des cris immondes et insupportables, une odeur pestilentielle s'en dégage, comme font les corps gangrenés. Et, effectivement, ils semblent tous être atteints de la lèpre, les acolytes arrivent devant deux damnés assis, qui se grattent sans cesse, pour faire disparaitre l'horrible croûte qui les recouvre, en vain. Ils y rencontrent Griffolino, alchimiste et faux monnayeur, qui fut dénoncé et envoyé au bucher. Dante retrouve aussi Capocchio, un camarade d'étude de Dante qui se plaisait, non seulement à contrefaire et à méprendre toutes sortes de personnes, et à entreprendre des recherches sur la pierre philosophale, ce qui lui valut le bûcher.
Chant XXX
8e ''cercle'' : Les Trompeurs :
10e fosse : Les charlatans et faussaires (suite) :
II : Simulateurs : On y rencontre Gianni Schicchi, qui s'était fait passer pour Bose Donati (mort sans avoir fait de testament), il s'enfila dans son lit de mort afin de donner à Simon (son parent), son riche héritage. Pour remercier Schicchi, Simon lui donna une magnifique jument.
III : Faux monnayeurs : Maître Adam, qui falsifia les florins pour les comtes de Romène, et pour son propre profit, il fut découvert et brûlé.
IV : Menteurs : Sinon (espion grec de la guerre de Troie, c'est lui qui convainquit les Troyens d'accepter le cheval) et Putiphar qui tenta de séduire Joseph, et l'envoya en prison.
Chant XXXI
Du 8e ''''cercle'' ''au 9e : Les géants autour du puits : Les acolytes rencontrent des géants, ceinturés par le puits, il leur arrive à la taille, la moitié supérieure de leur corps est dehors tandis que l'autre est dans le puits. Ils mentionnent Nemrod, premier roi de Babylone, on apprend que c'est lui qui conçut le projet de la tour de Babel. Ils rencontrent aussi Éphialtès, fils de Poséidon et d'Iphimédie, puis Antée (l'unique géant à ne pas s'être retourné contre les dieux) qui les aidera à atteindre le neuvième ''cercle''.
Chant XXXII
9e ''cercle'' : Les traitres : Le marais glacé de Cocyte
I : La Caïnie : Traitres à leurs parents : On découvre dans ce chant, un énorme lac gelé, qui ressemble plus à du verre qu'à de la glace. Les damnés sont prisonniers à l'intérieur de la glace jusqu'au cou, ils ont le visage baissé les dents claquetantes, leur souffle et leurs larmes témoignent bien assez du supplice qu'ils éprouvent ; en plus le fait d'être la tête baissée leur donne encore plus de douleur lorsqu'ils pleurent car les larmes qu'ils versent se gèlent sur leurs joues et leurs paupières... Dante et Virgile rencontrent Alexandre et Napoléon de Alberti, tous deux comtes et seigneurs, lors de la mort de leur père, ils se lancèrent dans une force et avide bataille envers leurs vassaux et pillèrent tout, puis ils s'entretuèrent tous deux. Ce qui leur a valu cette place ici où ils s'étreignent éternellement dans un combat sans fin. Ils remarquent aussi Vanni de Cancellieri, qui par traîtrise tua son oncle.
II : L'Anténore : Traitres à leur cité : Buoso de Duera : Il était chargé par les Gibelins de barrer le passage de Charles Ier d'Anjou mais Buoso accepta que le roi lui donne de l'argent pour qu'il puisse passer sans crainte ; et d'autres traîtres notoires, comme Tebaldello de Zambrasi qui céda l'une des portes de la ville de Faënza aux Guelfes et surtout un dénommé Bocca, Florentin de la famille des Abatti . Dans la bataille de Montaperti, (où quatre mille Guelfes furent massacrés, Bocca, gagné par l'argent des Gibelins, s'approcha de celui qui portait l'étendard et lui trancha la main ; les Guelfes, ne voyant plus leur étendard, se mirent en fuite et furent massacrés.
Dante à la fin du chant, remarque deux damnés dont l'un est un peu plus haut que l'autre, ainsi les deux têtes des damnés sont superposées, on remarque que celui qui à le dessus est en train de dévorer l'autre.
Chant XXXIII
9e ''cercle'' : Les traitres (suite) :
II : L'Anténore : Traitres à leur cité (fin) : Le comte Ugolin raconte son histoire à Dante ; on sait donc que celui qui dévorait la tête inférieure est le comte Ugolin et que l'autre est l'archevêque Roger. Le comte Ugolin s'est retrouvé là car il avait été accusé de trahison pour avoir vendu des châteaux aux factions adverses, et l'archevêque, pour avoir ignoblement enfermé le comte et ses fils dans la Tour de la Faim et le poussant presque à les dévorer il fut aussi condamné à ce châtiment de se faire dévorer par sa victime.
III : La Ptolémaïe : Traitres à leurs hôtes : Frère Albéric (l'un des frères joyeux), les traîtres à leurs hôtes sont aussi emprisonnés dans les glaces, mais cette fois la position de leur tête est différente : Ils ont la tête renversée, ainsi les larmes qui coulent de leurs yeux forment une barrière de cristal qui les aveugle et leur cause des souffrances inimaginables. Et le Frère Albéric s'était brouillé avec ses confrères depuis un moment, et voulant mimer la réconciliation il les invita tous pour un grand repas, ils mangèrent et lorsque Albéric demanda à ce qu'on apporte les fruits (c'était le signal), ses invités furent massacrés égorgés. Et notamment Branca d'Oria, qui jalousant la seigneurie de son beau-père l'invita à diner et le tua, son beau père était Michel Zanche, qui se trouve au 8e ''cercle'', cinquième fosse, on dit qu'à sa mort, Branca descendit plus vite aux Enfers que le malheureux qu'il avait assassiné.
Chant XXXIV
9e ''cercle'' : Les traitres (suite et fin) :
IV : La Judaïe : Traîtres à leur bienfaiteur : Dernier chant où Dante rencontre Lucifer, Dité, au milieu d'un endroit où tout est silencieux et où les autres damnés sont entièrement ensevelis sous la glace et souffrent en silence. Dité a trois paires d'ailes ainsi que trois têtes et donc trois visages, le premier visage est rouge de feu (représentant la haine), l'autre est livide (représentant l'impuissance), et le troisième est noir (représentant l'ignorance). Emprisonné dans la glace jusqu’à la poitrine, il bat éternellement des ailes pour tenter de se libérer, produisant ainsi des vents glacials qui maintiennent le Cocyte gelé. Les trois têtes mâchent éternellement les trois coupables : Judas (qui a trahi le Christ), Cassius et Brutus (traitres à César). Dante et Virgile sortent en s'accrochant aux poils de Lucifer et, après une petite explication de Virgile sur la manière dont ils sont sortis des Enfers, les deux acolytes, finalement, peuvent enfin "revoir les étoiles".
Chant I
L'histoire commence alors qu'Ulysse est retenu captif sur l'île de la nymphe Calypso est incapable de rentrer chez lui retrouver sa femme Pénélope. Tous les dieux lui sont favorables, sauf Poséidon qui lui en veut pour avoir rendu aveugle son fils Polyphème (épisode narré dans le chant IX). Alors que Poséidon est parti festoyer en Éthiopie, les autres se rassemblent et Athéna demande à Zeus de permettre à Ulysse de rentrer. Zeus y consent et envoie Hermès demander à Calypso de libérer Ulysse.
Athéna se rend à l'île d'Ithaque pour conseiller Télémaque, le fils d'Ulysse, d'assembler les Achéens pour dénoncer les prétendants de Pénélope, puis de partir vers Pylos et Sparte prendre des nouvelles sur le retour de son père.
Chant II
Le deuxième jour, Télémaque tente vainement de faire appel à la conscience des prétendants qui refusent avec mépris. Télémaque emprunte un navire et, accompagné de Mentor, se rend de nuit à Pylos.
Chant III
À Pylos, il est accueilli le jour suivant par Nestor qui n'a aucune nouvelle d'Ulysse. Sur demande de Télémaque, Nestor décrit la mort d'Agamemnon.
Chant IV
Télémaque part le lendemain en char vers Sparte où il est reçu par Ménélas et Hélène. Le sixième jour, Ménélas décrit son retour de Troie et annonce que Protée, le « vieil homme de la mer », lui a dit qu'Ulysse vit encore en captivité sur une île. Il invite Télémaque à rester quelques jours, offre qu'il refuse, même s'il s'avère qu'il restera encore plus longtemps à Sparte. Pendant ce temps à Ithaque, les prétendants apprennent que Télémaque est parti à la recherche de son père et décident de lui tendre un piège.
Chant V
Le septième jour, de retour sur l'Olympe, Athéna réitère sa demande de libérer Ulysse et Hermès est envoyé pour présenter le message à Calypso. À l'entretien de Calypso et d'Hermès succède celui d'Ulysse et de Calypso. Le héros préfère retourner auprès de son épouse, bien qu'elle soit mortelle (vers 218-219).
Zeus annonce qu'Ulysse rejoindra les Phéaciens après 20 jours de navigation et que ceux-ci le conduiront à Ithaque.
Ulysse se construit un radeau de fortune avec lequel il partira le douzième jour. Après avoir navigué 18 jours, il aperçoit Corcyre. Cependant, Poséidon élève une tempête contre lui et il ne peut accoster que le 32e jour.
Chant VI
Nausicaa escortant Ulysse, illustration de John Flaxman (1810)
Le lendemain, selon un arrangement d'Athéna, Ulysse fait la connaissance de Nausicaa, la fille d'Alcinoos, le roi phéacien. Ulysse adresse un long discours à Nausicaa et celle-ci accepte de l'aider.
Chant VII
Avec l'aide d'Athéna, Alcinoos le reçoit au palais et accepte de l'aider, Ulysse décrit son arrivée en Phéacie, sans révéler son identité.
Chant VIII
Le lendemain, Alcinoos invite Ulysse à un banquet en son honneur. Un aède chante la querelle d'Ulysse et d'Achille, et Ulysse est pris de larmes à ce souvenir. Pour changer les idées de son hôte, Alcinoos ordonne des jeux impromptus. Puis l'aède reprend ses chants, parmi lesquels le récit du cheval de Troie. Ulysse se trahit alors, et accepte de raconter son périple.
Chant IX
Scène de l'Odyssée, fresque romaine (fin du ~IIe siècle av. J.-C.)
(Début du récit d’Ulysse)
Il fait alors le récit du voyage de deux ans, entre la chute de Troie et sa captivité sur l'île de Calypso. Il relate le départ avec une flotte de douze navires quand les vents les poussèrent vers la cité des Cicones, Ismare. Ils prirent la ville par surprise et la mirent à sac. Peu empressés de repartir le même soir, ils furent attaqués par les Cicones qui étaient allés chercher de l'aide chez les voisins et durent s'enfuir à la hâte. De là, les vents les emportèrent chez les Lotophages, probablement dans une partie inconnue du monde. Ce peuple d'une grande hospitalité les accueillit et leur offrit leur nourriture : le lotos. Quiconque mangeait de ce fruit ne désirait plus repartir et Ulysse dut ramener de force quelques membres de sa flotte. Ils naviguèrent ensuite vers l'île des Cyclopes où, faits prisonniers par Polyphème qui allait les dévorer, ils purent s'échapper en perçant son œil unique, suscitant ainsi le courroux de Poséidon (le père de Polyphème).
Chant X
Le Naufrage d’Ulysse, par Heinrich Füssli (1803)
(Suite du récit d’Ulysse)
Les compagnons d'Ulysse et lui même partirent pour l'île d'Éole qui tenta de les aider à rentrer, puis vers Télépyle, la cité des Lestrygons cannibales. Ulysse ne put s'enfuir qu'avec un navire vers l'île de Circé, où ils restèrent un an. Cette enchanteresse ouvrit ses portes à un petit groupe dirigé par Euryloque qui, méfiant, fut le seul à rester dehors. Les hommes qui entrèrent furent transformés en porcs lors du repas et Euryloque repartit vers le navire. Ulysse courut sauver ses compagnons, rencontrant en chemin Hermès qui lui donnera un antidote, le moly. La magicienne, éprise d'Ulysse, décida de lui rendre ses hommes dans leurs formes humaines et les invita à profiter de son hospitalité.
Après un an, Ulysse décida de repartir. Circé les invita à visiter les Enfers pour que le fantôme de Tirésias leur indique le chemin du retour.
Chant XI
Les Compagnons d’Ulysse volant le bétail d’Hélios, par Pellegrino Tibaldi (1454-1456)
(Suite du récit d’Ulysse)
Débarqué en pays cimmérien, Ulysse procéda au sacrifice, comme indiqué par Circé. Tirésias arriva, et Ulysse apprit qu'ils ne devaient pas toucher au bétail d'Hélios, le dieu du Soleil, s'ils voulaient rentrer chez eux. Il put aussi parler au fantôme de sa mère qui lui annonça que Pénélope l'attendait toujours fidèlement. Enfin, il vit ses anciens compagnons, dont Achille, qui lui fit part de son regret de la vie, et les damnés du Tartare.
Chant XII
(Fin du récit d’Ulysse)
Ils retournèrent voir Circé, puis repartirent en mer, évitèrent les Sirènes, Charybde et Scylla malgré la perte de quelques membres de l'équipage. Une fois sur l'île de Trinacrie, affamés et ne pouvant repartir à cause de la tempête, ils dévorèrent les troupeaux d'Hélios qui les vit du haut de son char. Seul Ulysse, qui n'avait pas mangé de bétail, échappa au châtiment de Zeus qui fit chavirer le navire avec tous ses hommes. Ulysse, flottant sur un radeau pendant dix jours, parvint à l'île de Calypso où il passa les huit années suivantes.
Chant XIII
Le jour suivant, le trente-cinquième, les Phéaciens lui offrent un navire, un équipage et des présents. Le soir, après un banquet, Ulysse quitte ce peuple pour rentrer chez lui.
Le lendemain, il atteint sa patrie. Athéna, d'abord déguisée en jeune berger, l'accueille. Elle l'informe des manigances des prétendants de Pénélope et le déguise en vieillard afin qu'il puisse voir ce qui se passe chez lui. Il part ensuite retrouver son loyal porcher, Eumée.
Chant XIV
Ulysse, déguisé en mendiant, est accueilli par Eumée qui lui offre l'hospitalité. Ce dernier refuse de croire qu'Ulysse est encore en vie, malgré les affirmations du mendiant.
Chant XV
Athéna et Télémaque, illustration de John Flaxman (1810)
Pendant ce temps, Athéna part chercher Télémaque à Lacédémone où il demeurait depuis un mois. Elle lui conseille de rentrer dans son pays et d'aller chez Eumée. Suivant son conseil, il échappe à une embuscade et arrive deux jours plus tard chez le porcher.
Chant XVI
Le trente-neuvième jour, il rencontre donc son père que personne n'a encore reconnu sous le déguisement. Après avoir écouté Eumée, Télémaque lui demande d'aller voir Pénélope pour la prévenir de son retour. Une fois que le serviteur est parti, Athéna révèle l'identité d'Ulysse à son fils et les deux hommes montent un complot pour se débarrasser des cupides prétendants. Le soir, Eumée revient à sa cabane où Ulysse a repris son déguisement.
Chant XVII
Le jour suivant, Télémaque part pour la ville où sa mère le reçoit à bras ouvert. Sans lui révéler que son père est de retour, il informe Pénélope que la nymphe Calypso le retenait sur son île. Dans l'après-midi, Ulysse et Eumée atteignent la ville et Ulysse se fait passer pour un mendiant. Le vieux chien d'Ulysse, Argos, meurt en reconnaissant son maître. Après quelques conflits mineurs pendant lesquels les prétendants insultent le mendiant, Ulysse retrouve Télémaque.
Chant XVIII
Iros, mendiant attitré d'Ithaque, insulte Ulysse déguisé en mendiant. Une bagarre éclate, dont Ulysse sort vainqueur. Guidée par Athéna, Pénélope se montre aux prétendants, et donc également à Ulysse. Les insultes à l'égard d'Ulysse continuent, mais le banquet s'achève dans un calme relatif.
Chant XIX
Ulysse déguisé en mendiant tente de se faire reconnaître par Pénélope, relief en terre cuite, v. 450 av. J.-C., musée du Louvre (CA 860)
Ulysse et Télémaque s'emparent des armes accrochées aux murs du palais et les placent en lieu sûr. Ulysse parle ensuite à Pénélope sans que celle-ci le reconnaisse. Elle lui explique qu'elle ne croit pas qu'il soit mort et qu'elle ne désire pas se remarier. C'est pourquoi elle a repoussé les prétendants, leur faisant croire qu'elle tissait un linceul pour le père de son mari mais elle défaisait chaque nuit le travail accompli durant le jour. Pénélope sort en ordonnant à la nourrice Euryclée de nettoyer les pieds de son invité. En reconnaissant une cicatrice sur la jambe d'Ulysse, la nourrice comprend qu'il s'agit de son roi mais elle promet de garder le secret.
Pénélope revient et annonce à son invité qu'elle consentira à épouser celui qui sera capable de bander l'arc de son époux et d'envoyer une flèche traverser douze haches alignées, comme le faisait Ulysse.
Chant XX
Le 41e jour, à l'occasion de la fête d'Apollon, le banquet commence. Ulysse subit de nouveau des insultes et des moqueries. Pendant le repas, les prétendants sont saisis d'un trouble. Théoclymène prophétise soudain leur fin funeste, et quitte l'assemblée sur les moqueries.
Chant XXI
Pénélope fait préparer les armes et avise ses prétendants de sa décision. Toutefois, aucun d'eux ne peut même bander l'arc d'Ulysse. Celui-ci fait signe à deux de ses serviteurs qui l'avaient reconnu de fermer les portes. Ulysse bande l'arc sans problème et réussit l'épreuve. Télémaque, en armes, rejoint son père.
Chant XXII
Massacre des prétendants par Ulysse et Télémaque, cratère campanien à figures rouges, v. 330 av. J.-C., musée du Louvre (CA 7124)
Ulysse abat Antinoos avant de se faire reconnaître, puis il se met à massacrer les prétendants les uns après les autres avec l'aide de Télémaque. Athéna apparaît et influence la bataille. Ulysse fait ensuite pendre les servantes complices des prétendants et purifie son palais au soufre.
Chant XXIII
Le soir, Ulysse rejoint Pénélope qui doute encore. En accord avec Télémaque, il retarde l'annonce de la nouvelle de la mort des prétendants. Pénélope met son mari à l'épreuve en lui mentant sur leur lit. Ulysse, en révélant les caractéristiques du lit, se fait enfin reconnaître. Ils se tombent dans les bras et se racontent les souffrances qu'ils ont subies durant toutes ces années.
Nombre d'homéristes considèrent que le poème authentique s'achève avec le vers XXIII 296, qui évoque sobrement les retrouvailles charnelles des deux époux et que tout ce qui suit a été ajouté postérieurement, comme le chant X de l'Iliade (la Dolonie).
Dans un débat extrêmement complexe et technique, deux faits sont irréfutables :
- les grammairiens d'Alexandrie Aristophane et Aristarque reconnaissaient ici la "fin" ou le "terme", πέρας, de l'Odyssée, pour des raisons qui ne semblent pas avoir été documentaires (i.e. parce qu'ils connaissaient des copies du poème s'achevant en XXIII 296), mais en raison d'un verdict littéraire
- les 624 derniers vers de l'Odyssée rendent un son très différent du reste : la narration court la poste sur des points essentiels (le conflit avec les familles des prétendants [XXIV 413-548]) alors qu'elle s'étend très au long sur des détails moins immédiatement cruciaux (l'arrivée des âmes des prétendants aux Enfers [XXIV, 1-204], scène qui interrompt brutalement l'action) ; le style est beaucoup moins heureux que partout ailleurs, souvent à peine plus qu'un ronron de formules.
Un assez grand nombre de faits linguistiques, notamment des mots nouveaux ou employés dans des sens non homériques, ne s'expliquent pas si la fin de l'Odyssée est authentique, donc remonte à l'époque archaïque [3]. De ce point de vue, la démolition par Hartmut Erbse des arguments contre l'authenticité tirés de la langue et du style verbal[4]) ; une excellente version anglaise existe[5]) a fait l'objet d'une réfutation exhaustive, pour les retrouvailles d'Ulysse et de son père Laërte, par J.-F. Nardelli [6].
Comme dans le cas du Prométhée enchaîné attribué à Eschyle, il est important de ne pas oublier que l'authenticité de la fin de l'Odyssée ne peut être assumée comme allant de soi.
Chant XXIV
Hermès conduit aux Enfers les âmes des prétendants, les autres âmes discutent entre elles de la nouvelle. De son côté, Ulysse retrouve Laërte, son vieux père, et s'en fait reconnaître. Comme la nouvelle s'est enfin répandue dans la ville, les familles des prétendants, menées par le père d'Antinoos, tentent de venger leurs morts. Athéna s'interpose alors et ordonne la paix entre les deux camps.
Œuvres dérivées
L’Odyssée a inspiré de nombreuses œuvres, dans des domaines très divers :
Franco Rossi a réalisé pour la télévision une adaptation très fidèle en 8 épisodes d'une heure.
Le roman Ulysse de James Joyce (1921) se veut une réécriture de l’Odyssée dans le Dublin moderne, en une journée ;
Ulysse 31 est un dessin animé franco-japonais représentant les périples d’un Ulysse du ~XXXIe siècle ;
Lob et Pichard l’ont reprise en bande dessinée, qui revisite l’Olympe comme une assemblée d’extraterrestres munis de technologies modernes : l’outre à vent d’Éole est par exemple un réacteur, etc. Cette bande dessinée se nomme Ulysse.
~Jean-Michel Ribes a écrit une pièce de théatre L'odyssée pour une tasse de Thé reprenant l'Odyssée d'une façon parodique.
Le film O'Brother des frères Coen est une Odyssée revisitée.
La chanson The Odyssey de Symphony X, épique de 5 chapitres pour 24 minutes, racontant le voyage de retour d'Ulysse (2002).
Notes
1.↑ L’extrait de l’Odyssée est issu de la traduction de Philippe Jaccottet, Club français du livre, 1955.
2.↑ Traduction de Victor Bérard aux Belles Lettres, 1924.
3.↑ D. L. Page, The Homeric Odyssey [Oxford, Clarendon Press, 1955], chapitre V
4.↑ Beiträge zum Verständnis der Odyssee [Berlin & New York, de Gruyter, 1972], 2e Partie, chapitre III
5.↑ G. M. Right & P. V. Jones, Homer. German Scholarship in Translation [New York, Oxford University Press, 1998
6.↑ La diction épique en débat. Un commentaire linguistique d'Odyssée XXIV 205-412 [Amsterdam, Hakkert, 2006]
<<tag personnages>>
<<tag lieux>>
<<tag idées>>
le § [[236]] est le véritable départ, on peut y choisir le type de roman. Ne pas développer tous
améliorer la grille en ne gardant que les tags du roman
<<tagsTree root " " " " ">>
<<relatedTiddlers 1 hideform "exclude list">>
|!Homme|!Femme|
|001|005|
* femme de 30 / 40 ans, sans enfants ? , pas mariée.
* élevée dans un pensionnat -1-, avec son ami Macha
* transgendre ?
* croit venir pour un travail de traductrice, sait-elle pourquoi elle vient (amnésique): si elle était la "méchante" ?
* reprendre au 212
* en 074, multiplier les questions et les orientations
* Établir le système de dés sans dés: 004, faire aussi un speech sur l'utilité du crayon à papier..
* Faire la fiche de points:
* Poser la question sur le groupe: possible de jouer une musique quand on déplie un tiddler ?
*// L'inconscient se venge la nuit.// L.Scutenaire ....//et parfois dans les textes//
* // La pluie nous rend triste car elle nous rappelle le temps où nous étions poissons.// Gomez de la Serna
Premier parcours et première sortie de la chambre. Découverte de l'étage. Impossible désormais de faire l'économie d'une histoire.
Introduire mc comme guide. Il doit mener vous au bureau du 14 étage. Ou il doit présenter l'histoire ???
En rajouter une couche dans le mystère , ou plutôt la confusion ? Que pourra-t-il se passer ?