Affichage avec alignement justifié en C

Cet article propose un algorithme avec une implémentation en langage C permettant d’afficher un texte en alignement justifié. Ceci signifie que le texte est aligné à gauche et à droite sur un nombre de colonnes prédéfinies, la dernière ligne étant alignée à gauche. Le programme va donc insérer les espaces nécessaires entre les mots afin d’obtenir les alignements.

Vous aurez ainsi à disposition une fonction C permettant d’avoir une belle présentation pour vos jeux d’aventure textuels… et d’autres utilisations sont possibles, bien évidemment.

Cela semble assez simple en théorie, mais j’ai intégré les contraintes suivantes :

  • Pas d’utilisation de nombres réels (float) pour que le programme reste performant avec un ordinateur 8 bits.
  • Dans le cas ou un mot est plus long que le nombre de colonnes d’affichage, ce mot doit être coupé afin de conserver un affichage correct.
Présentation du programme jprint

Le programme est constitué de 4 fonctions :

jprint : affiche la totalité du message avec alignement justifié.

print_line_justified : affiche une ligne de mots avec alignement justifié

print_line_left : affiche une ligne avec alignement à gauche

print_word : affiche un mot

L’algorithme est relativement simple:

  • Il parcourt la chaîne de caractères à afficher du début à la fin.
  • Il construit ainsi une liste de mots à afficher sur une ligne (liste courante).
  • Lorsqu’un nouveau mot est détecté, il regarde si le nombre de caractères des mots de la liste courant en incluant le nouveau mot reste inférieur au nombre de colonnes maximum (constante NB_COL), en tenant compte d’un caractère d’espace entre chaque mot.
  • Si c’est le cas, le nouveau mot est ajouté à ligne courante car il reste suffisamment de place sur la ligne, et l’algo passe au mot suivant.
  • Sinon, la ligne courante est saturée et sera affichée en alignement justifié. Le nouveau mot constitue le premier mot de la nouvelle ligne à afficher.
  • Dans le cas où le nouveau mot est plus long que NB_COL, le nouveau mot est coupé ; une partie sera affichée sur la ligne courante, l’autre sur la ligne suivante.
Comment utiliser le programme ?

Vous pouvez utiliser jprint directement depuis la ligne de commande et passer le texte à afficher en argument (entre guillemets). En l’absence d’argument, le programme bascule en mode test et affiche une série de textes qui m’ont permis de déboguer le programme.

Pour utiliser jprint dans votre propre programme, il est nécessaire d’insérer les lignes 38 à 240 de jprint.c qui correspondent aux constantes, définition des types, déclaration des fonctions et les quatre fonctions print_word, print_line_left, print_line_justified et jprint.

Vous pouvez choisir le nombre de colonnes d’affichage en modifiant la constante NB_COL.

Les sources

Voici le code source, accompagné d’un makefile.

Pour compiler, extraire l’archive, ouvrir une fenêtre de commande, se placer dans le répertoire et saisir la commande make.

Et la suite ?

Dans un prochain article je publierai un jeu d’aventure textuel qui utilise jprint.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *