[JIF] Problèmes et... solutions (on essaiera)

*** A propos de l’installation de JIF ***
Sur le site de l’auteur:
slade.altervista.org/JIF/?F. … on_Windows

En gros:

  • installer les librairies Java ( java.sun.com/j2se/1.4.2/download.html )
  • installer JIF
  • placer le compilateur Inform dans le dossier « compiler »
  • placer l’interpreteur WinFrotz dans le dossier « interpreter »
  • placer les bibliothèques (livrées avec le compilateur) dans le dossier « lib »

Pour le pack compilateur/librairies en français, se référer au site de Jean-Luc Pontico: jlpo.free.fr

pour ceux qui ont un pb pour lancer JIF, il peut être judicieux d’ouvrir une fenêtre de « terminal » dos (menu démarrer, et taper : « command » ou « cmd » sous xp), puis à l’invite :

java -jar c:/chemindurepertoiredejif/scriptdejif.bat

et nous poster le message d’erreur.

Pour avoir rapidement le chemin de jif, il est peut être possible de faire un copier / coller depuis l’explorateur de documents, voire même de glisser l’adresse du fichier.

j’indique ceci pour les 0,0001 % des développeurs Inform utilisateurs de mac qui codent avec Jif :

Apparemment Jif a un problème pour lire correctement le stupide encodage mac ce qui se traduit par un code qui s’ouvre sur ce genre de chose :

! Constantes gÈnÈrales
!--------------------------------------------

Constant Story « Exemple inform en FranÁais »;
Constant Headline « ^pour tester avec Jif^
Copyright (c) 2004 par .^ »;

/…/

Object Piece1 « PiËce de dÈpart »

etc.

Si ce n’était qu’un problème de convertisseur… pour que le code généré soit correct en zmachine, il faut que cela soit cet encodage qui soit compilé. Donc ce n’est pas très pratique pour lire du code issu d’une autre machine, et encore plus difficile d’écrire correctement dans jif. (Les accents se transforment en ?? une fois le code compilé)

Il existe une fonction unix qui convertisse un encodage dans un autre, mais dans le cas de codage mixte, cela ne va pas.
J’ai essayé également des scripts shell, mais les caractères de remplacement n’étaient pas lisibles (obligation de mélanger deux encodages, donc d’avoir un script en unicode, ce qui ne le rend pas exécutable).

Heureusement il est possible d’utiliser conjointement à jif le logiciel (lui aussi java) jedit (jedit.org/) qui permet de créer des macros de remplacement de caractères.
Voici la teneur de la macro, pour du texte français (codage mac → codage unix / windows etc.) :


SearchAndReplace.setSearchString("Ë");
SearchAndReplace.setReplaceString("è");
SearchAndReplace.setBeanShellReplace(false);
SearchAndReplace.setIgnoreCase(false);
SearchAndReplace.setRegexp(false);
SearchAndReplace.setSearchFileSet(new CurrentBufferSet());
SearchAndReplace.replaceAll(view);


SearchAndReplace.setSearchString("È");
SearchAndReplace.setReplaceString("é");
SearchAndReplace.setBeanShellReplace(false);
SearchAndReplace.setIgnoreCase(false);
SearchAndReplace.setRegexp(false);
SearchAndReplace.setSearchFileSet(new CurrentBufferSet());
SearchAndReplace.replaceAll(view);


SearchAndReplace.setSearchString("‡");
SearchAndReplace.setReplaceString("à");
SearchAndReplace.setBeanShellReplace(false);
SearchAndReplace.setIgnoreCase(false);
SearchAndReplace.setRegexp(false);
SearchAndReplace.setSearchFileSet(new CurrentBufferSet());
SearchAndReplace.replaceAll(view);


SearchAndReplace.setSearchString("û");
SearchAndReplace.setReplaceString("?");
SearchAndReplace.setBeanShellReplace(false);
SearchAndReplace.setIgnoreCase(false);
SearchAndReplace.setRegexp(false);
SearchAndReplace.setSearchFileSet(new CurrentBufferSet());
SearchAndReplace.replaceAll(view);



SearchAndReplace.setSearchString("?");
SearchAndReplace.setReplaceString("ù");
SearchAndReplace.setBeanShellReplace(false);
SearchAndReplace.setIgnoreCase(false);
SearchAndReplace.setRegexp(false);
SearchAndReplace.setSearchFileSet(new CurrentBufferSet());
SearchAndReplace.replaceAll(view);



SearchAndReplace.setSearchString("Ù");
SearchAndReplace.setReplaceString("ô");
SearchAndReplace.setBeanShellReplace(false);
SearchAndReplace.setIgnoreCase(false);
SearchAndReplace.setRegexp(false);
SearchAndReplace.setSearchFileSet(new CurrentBufferSet());
SearchAndReplace.replaceAll(view);


SearchAndReplace.setSearchString("Ó");
SearchAndReplace.setReplaceString("î");
SearchAndReplace.setBeanShellReplace(false);
SearchAndReplace.setIgnoreCase(false);
SearchAndReplace.setRegexp(false);
SearchAndReplace.setSearchFileSet(new CurrentBufferSet());
SearchAndReplace.replaceAll(view);

SearchAndReplace.setSearchString("Ô");
SearchAndReplace.setReplaceString("ï");
SearchAndReplace.setBeanShellReplace(false);
SearchAndReplace.setIgnoreCase(false);
SearchAndReplace.setRegexp(false);
SearchAndReplace.setSearchFileSet(new CurrentBufferSet());
SearchAndReplace.replaceAll(view);

SearchAndReplace.setSearchString("Î");
SearchAndReplace.setReplaceString("ë");
SearchAndReplace.setBeanShellReplace(false);
SearchAndReplace.setIgnoreCase(false);
SearchAndReplace.setRegexp(false);
SearchAndReplace.setSearchFileSet(new CurrentBufferSet());
SearchAndReplace.replaceAll(view);


SearchAndReplace.setSearchString("Í");
SearchAndReplace.setReplaceString("ê");
SearchAndReplace.setBeanShellReplace(false);
SearchAndReplace.setIgnoreCase(false);
SearchAndReplace.setRegexp(false);
SearchAndReplace.setSearchFileSet(new CurrentBufferSet());
SearchAndReplace.replaceAll(view);


SearchAndReplace.setSearchString("Á");
SearchAndReplace.setReplaceString("ç");
SearchAndReplace.setBeanShellReplace(false);
SearchAndReplace.setIgnoreCase(false);
SearchAndReplace.setRegexp(false);
SearchAndReplace.setSearchFileSet(new CurrentBufferSet());
SearchAndReplace.replaceAll(view);

et voici celle qui code dans l’autre sens (à utiliser avant de compiler son jeu) :

SearchAndReplace.setSearchString("è");
SearchAndReplace.setReplaceString("Ë");
SearchAndReplace.setBeanShellReplace(false);
SearchAndReplace.setIgnoreCase(false);
SearchAndReplace.setRegexp(false);
SearchAndReplace.setSearchFileSet(new CurrentBufferSet());
SearchAndReplace.replaceAll(view);


SearchAndReplace.setSearchString("é");
SearchAndReplace.setReplaceString("È");
SearchAndReplace.setBeanShellReplace(false);
SearchAndReplace.setIgnoreCase(false);
SearchAndReplace.setRegexp(false);
SearchAndReplace.setSearchFileSet(new CurrentBufferSet());
SearchAndReplace.replaceAll(view);


SearchAndReplace.setSearchString("à");
SearchAndReplace.setReplaceString("‡");
SearchAndReplace.setBeanShellReplace(false);
SearchAndReplace.setIgnoreCase(false);
SearchAndReplace.setRegexp(false);
SearchAndReplace.setSearchFileSet(new CurrentBufferSet());
SearchAndReplace.replaceAll(view);


SearchAndReplace.setSearchString("û");
SearchAndReplace.setReplaceString("?");
SearchAndReplace.setBeanShellReplace(false);
SearchAndReplace.setIgnoreCase(false);
SearchAndReplace.setRegexp(false);
SearchAndReplace.setSearchFileSet(new CurrentBufferSet());
SearchAndReplace.replaceAll(view);



SearchAndReplace.setSearchString("ù");
SearchAndReplace.setReplaceString("?");
SearchAndReplace.setBeanShellReplace(false);
SearchAndReplace.setIgnoreCase(false);
SearchAndReplace.setRegexp(false);
SearchAndReplace.setSearchFileSet(new CurrentBufferSet());
SearchAndReplace.replaceAll(view);



SearchAndReplace.setSearchString("ô");
SearchAndReplace.setReplaceString("Ù");
SearchAndReplace.setBeanShellReplace(false);
SearchAndReplace.setIgnoreCase(false);
SearchAndReplace.setRegexp(false);
SearchAndReplace.setSearchFileSet(new CurrentBufferSet());
SearchAndReplace.replaceAll(view);


SearchAndReplace.setSearchString("î");
SearchAndReplace.setReplaceString("Ó");
SearchAndReplace.setBeanShellReplace(false);
SearchAndReplace.setIgnoreCase(false);
SearchAndReplace.setRegexp(false);
SearchAndReplace.setSearchFileSet(new CurrentBufferSet());
SearchAndReplace.replaceAll(view);

SearchAndReplace.setSearchString("ï");
SearchAndReplace.setReplaceString("Ô");
SearchAndReplace.setBeanShellReplace(false);
SearchAndReplace.setIgnoreCase(false);
SearchAndReplace.setRegexp(false);
SearchAndReplace.setSearchFileSet(new CurrentBufferSet());
SearchAndReplace.replaceAll(view);

SearchAndReplace.setSearchString("ë");
SearchAndReplace.setReplaceString("Î");
SearchAndReplace.setBeanShellReplace(false);
SearchAndReplace.setIgnoreCase(false);
SearchAndReplace.setRegexp(false);
SearchAndReplace.setSearchFileSet(new CurrentBufferSet());
SearchAndReplace.replaceAll(view);


SearchAndReplace.setSearchString("ê");
SearchAndReplace.setReplaceString("Í");
SearchAndReplace.setBeanShellReplace(false);
SearchAndReplace.setIgnoreCase(false);
SearchAndReplace.setRegexp(false);
SearchAndReplace.setSearchFileSet(new CurrentBufferSet());
SearchAndReplace.replaceAll(view);


SearchAndReplace.setSearchString("ç");
SearchAndReplace.setReplaceString("Á");
SearchAndReplace.setBeanShellReplace(false);
SearchAndReplace.setIgnoreCase(false);
SearchAndReplace.setRegexp(false);
SearchAndReplace.setSearchFileSet(new CurrentBufferSet());
SearchAndReplace.replaceAll(view);

à noter qu’il reste un petit problème avec le caractère â qui semble être converti en « , » (à vérifier). Il faudra peut-être le changer manuellement.