Prehtml, version 2.8

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! Si ça ne marche pas, essayez http://mjulier.free.fr/prehtml/prehtml-current.tar.gz
(format .tar.gz, à décoder en lançant "tar -zxf prehtml.tar.gz", un répertoire nommé prehtml sera créé, contenant le code source et l'exécutable qui s'appelle simplement "prehtml").

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

Paramètres en ligne de commande

Le programme se lance de la façon suivante:

prehtml [options] <fichier1.prehtml> [<fichier2.prehtml> ...]

Principe général:

Pour chaque fichier "nom.prehtml" en entrée, un fichier "nom.html" est créé par le logiciel (sauf commandes spéciales).
De même, pour un fichier "nom.prehtm" en entrée, un fichier "nom.htm" est créé.

Code de retour

Standard: retour non nul si le programme a rencontré une erreur.

Options (qui peuvent être combinées)

-d : debug
Option présente depuis le départ, mais elle est rarement commode.
Le fichier généré est envoyé dans la sortie standard (stdout) en même temps que dans le fichier de destination.
L'intérêt est, parfois, de comprendre à quel endroit une erreur se produit.
-s : structure

Depuis v1.9: affiche le détail des fichiers dans lesquels on rentre ou on sort.
Utile pour déboguer les pages utilisant beaucoup de fichiers inclus.

-S : Shell

Depuis v1.9: affiche les commandes Shell lancées.
Le Shell Unix est à la base du logiciel prehtml, normalement c'est invisible, mais avec cette option on voit les commandes lancées et on peut parfois comprendre pourquoi une commande a échoué ou n'a pas donné le résultat attendu.

-b <bash,...> : Bash, appelle un shell autre que "sh"
Depuis v2.5, permet de choisir le shell utilisé, par exemple "bash" au lieu de "sh" qui est lancé par défaut, pour disposer d'une syntaxe plus pratique. Les formats "-bbash" ou "-b bash" sont acceptés tous les deux.
-8 : caractères 8 bits (supposés être iso-8859-1 plus le caractères "€")
-u : caractères 8 bits (supposés être Unicode UTF-8)

Depuis v2.4, permet une plus grande souplesse dans l'utilisant des jeux de caractères.
Par défaut (aucun paramètre), prehtml décode en entrée les codes HTML en caractères iso-8859-1 (occidental), par exemple le texte "&eacute;" est transformé dans le caractère 0xE9 ("é" dans le jeu iso-8859-1). Par exception, le caractère "€" est décodé selon son numéro dans le jeu iso-8859-15.
En sortie, les caractères sont recodés en HTML, donc tel que "&eacute;" dans notre exemple.
(sauf pour les codes de type URL, qui sont codés différemment, tels que "%E9").

Ceci pose un problème lorsque le texte d'entrée contient des caractères codés en 8 bits dans un autre jeu de caractères que iso-8859-1.

Avec l'option "-8", les caractères 8 bits sont laissés en l'état: ainsi, si le texte d'entrée contient des caractères 8 bits dans n'importe quel jeu de caractères, ceux-ci sont maintenus dans la sortie. Si cependant le texte d'entrée contient des codes HTML comme "&eacute;", ceux-ci continuent à être décodés selon le jeu iso-8859-1. C'est donc une option utile si on utilise des caractères 8 bits.

Avec l'option "-u", le fonctionnement est le même, sauf que les codes HTML sont décodés dans le jeu de caractères Unicode UTF-8, qui est devenu le plus courant sur le web car il permet d'afficher facilement toutes les langues du monde. C'est donc l'option à utiliser si on utilise le codage Unicode UTF-8.

Si les fichiers d'entrées ne contiennent pas de caractères codés en HTML tels que "&eacute;", les deux options "-8" et "-u" sont identiques.
Bien sûr, les codes HTML correspondant à des caractères 7 bits continuent à être décodés, à savoir "&lt;", "&gt;", "&amp;", "&nbsp;" et "&quot;" (correspondant à "<", ">", "&", espace insécable, et double guillemets). Sans cela, le logiciel ne fonctionnerait pas.

-f : force l'écriture

Depuis v2.6, écrit le fichier en sortie même s'il est identique à celui qui existe déjà (peut être utile pour les Makefile)

-h, --help : aide

Depuis v1.9, cette commande affiche la liste des paramètres en ligne de commande.

Recompilation

Aller dans le répertoire contenant les fichiers source, et taper "make". L'exécutable est créé avec les informations de débogage: pour les supprimer tapez "strip prehtml".

Il faut avoir "make", j'ai utilisé GNU make, mais je pense que ça marche avec n'importe quel make Unix.

Il faut aussi avoir un compilateur C. Par défaut, j'ai mis "gcc", pour en utiliser un autre il faut modifier la ligne "CC=gcc" du fichier Makefile.

Si vous compilez ce programme sur un système non-Unix, je ne sais pas ce que ça peut donner, ni même si ça peut marcher. Testé sur Linux/i386.

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/Mozilla 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? Bon, déjà, ce n'est pas l'usage classique de PHP, que la plupart des gens font tourner sur le serveur; cela dit, rien n'empêcherait de préparer d'abord les pages avec PHP sur sa propre machine, avant de les mettre sur le serveur. Le principal avantage de mon programme par rapport à PHP est celui-ci: je peux éditer mes pages dans un éditeur Wysiwyg (j'utilise Mozilla Composer), et quand je tape "<echo $lien>", mon programme arrive à faire ce qu'il faut même si c'est devenu "&lt;echo $lien&gt;" (codage HTML), ou bien "%3Cecho%$20lien%3E" (codage utilisé dans les liens eux-mêmes). Alors qu'avec PHP, il faut inclure les commandes dans des balises <?php ...>, chose en pratique impossible à faire facilement. Regardez mes exemples, en bas de cette page, pour comprendre ce qu'on peut faire facilement avec mon système.

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 "&lt;SHELL titre=&quot;Le v&eacute;lo&quot;>" (c'est ce que fournissait 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. Note: depuis v2.8, le même codage doit être utilisé pour l'ouverture et la fermeture de la balise: <BALISE> (non codé), ou &lt;BALISE&gt; (codage HTML), ou "%3CBALISE%3E" (code URL), le caractère ">" n'est plus accepté pour fermer une balise ouverte avec un codage, afin d'éviter une fermeture intempestive par une balise HTML contenue à l'intérieur.

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.prehtml>". Pour chaque fichier .prehtml, 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: 

Index des commandes

Détail des commandes

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 "*.prehtml"
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