Tutoriel HsIndex

Dans cette section, vous trouverez un tutoriel reprenant point par point un programme relativement simple que j’ai écrit avec Haskell.

Ce tutoriel vous permettra de vous familiariser avec les notions de base de ce langage et vous permettra également de découvrir les bibliothèques :

  • Parsec
    qui permet de réaliser des analyseur syntaxiques
  • CmdArgs
    qui permet de gérer les arguments en ligne de commande

Contexte

Afin de faire évoluer mon lexique de termes techniques écrit avec LaTeX , j’ai décidé de créer une version multilingue avec traductions d’autres langues comme l’allemand et le russe.

Afin d’alléger la version imprimable, il sera nécessaire de créer des indexes contenant les mots en langues étrangères pointant vers les bonnes pages du lexique.

De par sa conception, LaTeX est dépourvu de commande interne permettant de générer des indexes.

Pour ce faire il est nécessaire de passer par le paquet makeidx et par un programme externe : makeindex. Ce programme reprend les entrées de mots générées pendant la première phase de compilation avec makeidx, les tris et génère les commandes LaTeX permettant de créer l’index.

Ces commandes sont exécutées durant la deuxième phase de compilation pour donner la version définitive du document avec ses indexes.

Malheureusement, makeindex n’a été conçus que pour trier les caractères venant de la langue anglaise.

Les caractères accentués (é. è. à. ç. …). les caractères cyrilliques (Б, Г, Д, Ч, …) de même que le eszett allemand (ß) ne sont pas triés correctement et sont considérés comme des symboles.

fig:
Index en Français en utilisant la commande makeindex
fig:
Index en Russe en utilisant la commande makeindex

Un autre outil similaire xindy existe et permet de prendre en charge les caractères Unicodes dans leur ensemble. Malheureusement, xindy est codé en LISP et une incompatibilité de versions entre certaines bibliothèques rend ce programme indisponible sur la version 9 de Debian que j’utilise actuellement. Et il n’est pas exclu que cette incompatibilité persiste dans des versions futures.

Il était donc nécessaire de développer un nouvel outil spécifique pour répondre à mes besoins et pourquoi pas servir à d’autres personnes.

Une nouvelle mission pour Haskell!

Cahier des charges

Pour remplir son objectif, le programme devra avoir les fonctionnalités suivantes:

  1. Relire les fichiers d’index généré par le paquet makeidx.
  2. Utiliser le format de style que prend en charge makeindex (Ou être le plus compatible possible avec ce format)
  3. Trier les entrées dans l’ordre alphabétique.
  4. Être multiplateforme.
  5. Être accessible a d’autres personnes (Documentation claire et facilité d’utilisation).

D’autres fonctionnalités pourront également être développées:

  1. Ajout d’un niveau d’index a deux lettres.
  2. Possibilité d’étendre le programme à d’autres langues en incluant des règles spécifiques par l’utilisateur.
  3. Prendre en charge des équivalences de caractères.