Règles du forum

Le langage Ada uniquement, pas les compilateurs. Les questions de sémantique et de langage et les questions techniques liées à une application en particulier, son deux choses différentes. Si nécessaire, un forum sur GNAT et les autres compilateurs, tel JanusAda, sera ouvert.

Auteur Message
Beau Parleur
Avatar de l’utilisateur
Bonjour,

Je viens avec une nouvelle énigme avec Ada sur Gnu/Linux.
Je récupère la sortie de la commande source-highlight dans un fichier que je lis avec la fonction Text_Io.Get_Line.

J'ai beau chercher je ne vois pas pourquoi à la lecture l'écriture de la sortie de source-highlight sur la sortie standard, des saut de ligne sont effectuées de temps à autres.

Un indice peut-être, j'ai quelque caracère mistérieux devant être des bouts de séquence d'échapement, car en effet, j'utilise les options -s ada -f esc de source-highlight.

Ah et en fait j'affiche les séquence d'échappement avec le paquetage ANSI_Concole.
Merci Hibou.

exemple d'une ligne coupée en deux :

Code : 

--
Buffer := new String ' (Line(Fixed.Index(To_Lower(Line), "body" |
| [m)+4..Fixed.Index(To_Lower(Line), "is") - 1)); |
|

En début et en fin de ligne les pipe de la fenêtre et en seconde ligne commence un bout d'échappement . puis poursuit en fermant la parenthèse.

Voilà, si vous avez une idée.
Merci.
Profil
Administrateur
Avatar de l’utilisateur
ANSI_Console a été conçu pour les affichages sur la console comme écran, pas comme flux texte.

Regardes si par hasard les sauts de ligne n’apparaissent pas à 78 ou 80 caractères.
Profil
Beau Parleur
Avatar de l’utilisateur
N'empêche, ça fonctionne.
J'ai trouvé d'où ça viens probablement,
En fait ne je suis pas limité à 80 caractères, enfin ça dépend, bref.
En tout cas je formate quand même les page, les lignes, en fonction de la largeur du terminal et je coupe évidemment lorsque j'atteins le max de caractères. Mais j'ai pas pensé que les séquence d'échappement ne sont pas à compter dans les longueur de ligne.

Du coup, je cherche un moyen de récupérer la taille réelle du texte affiché dans une séquence de caractères, avec Ada.
Profil
Beau Parleur
Avatar de l’utilisateur
Re-bonjour,

J'ai écrit une petit fonction qui regarde si on entre dans une séquence d'échappement ou si l'on en sort avec un 'm' terminal pour traiter le texte coloriser.
Je l'ai déclaré dans Ansi_Console, et au lieux de comparer line'length à width j'appelle ma fonction qui retourne un naturel.

Ca marche mais que pour la couleur.
Merci Hibou.
Profil
Administrateur
Avatar de l’utilisateur
J’y pensais aussi, mais j’avais hésité à en parler.

Dans ce module, il n’y a pas de fonction de « décodage » des commandes de terminal ANSI. Ces commandes sont émises par les fonctions du module, mais il n’en attend pas en paramètres textes. Les seules qu’il interprète, et encore pas toujours de manière fiable dut à des différences d’implémentation d’un émulateur à l’autre, ce sont les commandes correspondantes aux appuis de touches.

En bref, les textes fournis en arguments ne sont pas censés contenir des commandes ANSI.
Profil
Beau Parleur
Avatar de l’utilisateur
Bonjour Hibou,

Je te comprends pas.
Tu dis que le paquetage ne traite pas les sequence Ansi, donc qu'est-ce qui empècherait l'utilisateur d'écrire des séquence Ansi.

Je pense au contraire que l'absence de traitement de ces séquence permet à l'utilisateur d'en écrire pour être interprété normalement par le temrinal.

Note que ça ne me pose aucun problème, juste pour la discute...
Profil
Administrateur
Avatar de l’utilisateur
Il en ajoute en sortie, mais ne les interprète pas en entrées : risque de commandes mal‑formées ou interférant entre elles.

Ça fait des années que je l’ai écrit, j’en parle de mémoire, mais je ne penses pas me tromper.
Profil
zen
Modératrice
Avatar de l’utilisateur
Heuuu… Oups ! Je me suis trompée de porte ! Hihihi! Image
Profil