Prehtml, version 1.1

Télécharger l'ensemble du projet (sources, exécutable pour linux, et mini-documentation). Ce lien fonctionne sur mon site, mais pas forcément si cette page est recopiée ailleurs!
(format .tar.gz, à décoder en lançant "tar -zxf prehtml.tar.gz", un fichier nommé prehtml sera créé).

Mais avant d'utiliser ce programme, jetez un coup d'oeil rapide aux questions légales.

Origine du projet

Des difficultés pour maintenir une liste de dépêches d'information sur un site consacré au vélo comme moyen de transport dans la région de Montpellier.

Initialement, chaque fois que je rajoutais une information, il fallait que je modifie une page "actualites.html", en écrivant le texte de la nouvelle information. Puis je rajoutais une cible <A NAME="pistes_etroites"> sur l'article, puis je recopiais le titre en haut de la page d'actualités avec un lien vers cette info <A HREF="#pistes_etroites"> pour retrouver facilement les dernières infos, et enfin je rajoutais cette info sur la page d'accueil "index.html" pour signaler la nouveauté <A HREF="actualites.html#pistes_etroites">. C'était beaucoup de travail à chaque fois, sans compter le travail d'archivage des informations un peu périmées.

Ensuite, j'ai été remplacé par un jeune génie des maths et de l'informatique, qui a automatisé tout le processus avec des scripts Perl et shell dans tous les sens, et quelques utilitaires Unix. Brillant, il faut le dire, mais incompréhensible: j'aime bien le Perl, mais à chaque fois que je m'y remets 3 mois après la dernière fois, j'ai oublié toute la syntaxe. Et le système rendait impossible ou presque l'utilisation d'éditeurs HTML un peu évolués comme Netscape et équivalents.

J'ai donc décidé de faire mon propre système, en me basant sur le langage qui me paraissait le plus simple et le plus connu: le Bourne-Shell, c'est-à-dire le langage de la console d'Unix. Pourquoi ne pas utiliser plutôt PHP ? Parce que PHP, qui est conçu pour s'exécuter sur le serveur lui-même, est infiniment plus complexe que ce que je recherchais. De plus, PHP n'est pas conçu pour générer toute une série de fichiers, alors que prehtml sait le faire facilement avec <GENERATE> (c'était un des buts du projet: gérer l'archivage de vieilles informations, année par année). En bref: PHP n'est sans doute pas vraiment utilisable pour traiter les fichiers avant de les télécharger sur le serveur.

Est-ce que ça a marché? Essayez toujours de jeter un oeil à montpellier.fubicy.org, mais aussi à collectiftramway.free.fr, un site que j'ai créé en quelques jours avec l'aide de ce programme. Pour ma part, je suis plutôt content du résultat, d'autant que moins d'une semaine après l'idée de départ, le programme fonctionnait déjà et, pire, je l'utilisais déjà avec parfaite satisfaction.

Aperçu général

Plusieurs cas se présentent:

Principe de prehtml

Le principe est fort simple: au début du programme, un "shell" démarre en parallèle de prehtml. Les commandes trouvées dans les fichiers .phtml (fichiers source) sont décodées avec l'aide du shell et/ou sous la forme de commandes shell. Le même shell tournant du début à la fin du traitement de la page, il est capable de stocker des variables, ce qui est très utile.

Si vous connaissez le shell, prehtml vous paraîtra évident. Sinon, vous avez le choix: soit apprendre le shell, soit vous passer de prehtml et trouver une autre solution à vos problèmes. Pour l'instant, je suis à ma connaissance le seul et unique utilisateur de ce programme.

Prehtml est écrit en C standard. Le C++ serait plus adapté mais j'aurais passé plus de temps à m'y remettre qu'à tout faire en C (le langage utilisé dans les microcontrôleurs...). On m'a fait remarqué qu'il aurait été plus simple d'utiliser des analyseurs syntaxiques tout faits: c'est juste, mais je ne connais pas du tout ces choses-là. Et que Perl sait faire tout cela ou presque: c'est exact, mais comme je l'ai signalé, ma mémoire n'arrive pas à retenir la syntaxe du Perl: à force de vouloir englobler toutes les syntaxes existantes dans le monde de la programmation, je trouve que ça perd un peu sa logique. Et je trouve le Perl très difficile à déboguer (peut-être par manque d'habitude).

Syntaxe

Les fonctions sont écrites sous une forme qui ressemble à des balises HTML. Par exemple <SHELL titre="Le vélo">. Bien sûr, ce sont des balises inconnues du HTML! Mais la différence est que si l'on utilise un éditeur HTML, cette balise risque fort de devenir ceci "&gt;SHELL titre=&quot;Le v&eacute;lo&quot;>" (c'est ce que fournit Netscape Composer). Mais ce n'est pas grave, prehtml est prévu pour décoder ce charabia et exécuter la commande tout aussi bien. Cela dit, si la commande est tapée à la main, donc réellement sous la forme <SHELL titre="Le vélo">, ça marche également.

Les commandes prehtml fonctionnent en minuscules ou en majuscules. Mais attention car le shell, lui, fait la différence! "ls" donne la liste des fichiers, mais pas "LS", et si vous définissez "titre", alors "Titre" n'est pas défini.

On lance le programme en tapant "prehtml <liste_de_fichiers.phtml>". Pour chaque fichier .phtml, un fichier .html est créé (sauf cas spécial mentionné plus bas). Si le fichier source s'appelle .phtm, le fichier créé s'appelle .htm. Si on donne plusieurs fichiers, le programme fonctionne comme si on le lançait successivement avec chaque fichier. Si le fichier qui doit être créé existe déjà et est exactement identique à celui qui devrait être créé, il n'est pas modifié (sa date n'est pas affectée, ce qui est utile pour des programmes automatiques comme Makefile ou sitecopy, utilisables pour créer ou pour télécharger le site).

Trêve de baratin, voici la liste des commandes, leur syntaxe, et des exemples:

Bugs et limitations

Trucs et astuces

Pour m'en sortir entre les extensions, j'utile ces conventions: Pour lancer prehtml, il y a au moins deux bonnes méthodes: Pour transférer les fichier sur le serveur j'utilise "sitecopy" (un programme gratuit). Pour ne transférer que les bons fichiers, le fichier de configuration ~/.sitecopyrc contient les lignes suivantes:
exclude "*.htm"
exclude "*.phtml"
exclude "*.tmp"
exclude "Makefile"

Questions légales

Tout le monde a le droit d'utiliser ce programme, de le recompiler (en enlevant les informations de débogage par exemple...), de l'adapter à d'autres systèmes d'exploitation, de le modifier pour son usage ou pour l'usage d'autrui.
Les limitations sont les suivantes:

Historique

Moi

J'ai une page ici.

Adresse de cette page: http://mjulier.free.fr/prehtml/lisezmoi.html