Hello,
J'ai conçu un script qui convertit un texte en Art Ascii.
Il est disponible en téléchargement ici :
https://debian-facile.org/images/file-R … 466cffe726Je recherche trois types de beta-testeur :
- pour le fonctionnement du script (tester le script et ses options)
- pour la compréhension du format du fichier embarqué (un dessinateur d'Art Ascii serait-il tenté d'en créer un ?)
- pour toutes critiques sur la structure/méthode/syntaxe… du script (avis aux codeurs)
Le script comporte 3 grandes parties (grandes car le script entier est très long ~2000 lignes) :
- une 1ère partie en
bash pour la gestion de la ligne de commande, l'aide embarquée. (~ 600 lignes)
- une 2ième partie : le fichier embarqué. (~ 900 lignes)
- une 3ième partie : un script
gawk convertissant le texte en dessins correspondants dans le fichier embarqué. (~ 500 lignes)
Le fichier de dessins Ascii embarqué manque encore d'ajustements de rendu (lignes CSV).
Voici l'aide embarquée actuelle :
Transcripteur en Art Ascii - transcii
Usage :
transcii [-c[-i]] [-d FILE] [-o FILE_OUT] [-s N] [-v…] TEXTE…
transcii [-c[-i]] [-d FILE] [-o FILE_OUT] [-s N] [-v…] < TEXTFILE
COMMAND | transcii [-c[-i] [-d FILE] [-o FILE_OUT] [-s N] [-v…]
transcii --quit [-d FILE] [-v…]
transcii --help
Description :
Convertir un texte TEXTE ou un fichier TEXTFILE ou un retour de COMMAND en un
texte d'Art Ascii et afficher le résultat.
Un fichier de dessins d'Art Ascii est embarqué.
Par défaut, ce fichier est utilisé à moins que l'option '--draws' ne soit
donnée, ou que la variable d'environnement Draws ne soit renseignée ou écrite
en dur dans ce script.
Dans cette notice, le terme Ascii désigne un dessin d'Art Ascii.
Attention : Désactiver les retours à ligne automatiques pour afficher
correctement le dessin d'Art Ascii d'une longue ligne convertie.
Options :
Les arguments obligatoires aux options longues le sont aussi aux courtes.
Les options inutiles dans la ligne de commande sont signalées.
-c,--check Vérifier le fichier de dessins Ascii.
(Voir Format et Vérification plus bas)
Quitter après la vérification totale si une erreur ou plus
est rencontrée sauf si l'option '--ignore' est renseignée.
Afficher si le fichier est conforme ou non.
Lister les erreurs rencontrées au niveau de verbosité 1.
-d,--draws FILE Indiquer le fichier de dessins Ascii.
FILE doit être lisible par l'utilisateur.
Prévaut sur la variable d'environnement Draws et sur
l'affectation en dur dans ce script de cette variable.
-f,--force-out Seulement avec l'option '--out'.
Forcer l'écrasement du fichier FILE_OUT s'il existe déjà.
-h,--help Afficher cette aide et quitter.
-i,--ignore Seulement avec l'option '--check'.
Ignorer les erreurs lors de la vérification du fichier de
dessins Ascii. Si des erreurs sont rencontrées, tenter tout
de même de convertir.
-o,--out FILE_OUT Indiquer le fichier de sortie FILE_OUT.
Le fichier FILE_OUT ne contient que le résultat final et
doit avoir les droits en écriture et ne doit pas exister
sinon sortie du programme avec erreur.
Les retours 'terminal' restent actifs.
-q,--quit Implique silencieusement l'option '--check'.
Quitter après la vérification du fichier de dessins Ascii
sans convertir.
L'option '--check' est inutile et non signalée.
Les entrées TEXTE… etc sont silencieusement ignorées.
-s,--spaces N N espaces insérés dans le dessin final pour un espace dans
le texte à convertir.
N doit être un entier positif.
Par défaut, 5 espaces insérés.
Prévaut sur la variable d'environnement Spaces et sur
l'affectation en dur dans ce script de cette variable.
-v,--verbose Rendre le programme plus parlant.
Option répétable 3 fois.
Niveaux de verbosité (-v, -vv, -vvv) :
-v : + Affichage du texte à convertir.
+ Affichage des stastitiques du fichier de
dessins Ascii :
- Hauteur totale (nb de lignes par dessin).
- N° de ligne de référence.
- Nombre de dessins Ascii trouvés au total.
- Nombre de dessins Ascci accessibles.
- Liste des caractères dessinables.
- Affichage des caractères ayant plusieurs
définitions + celui retenu.
+ Affichage des erreurs dans le fichier de
dessins Ascii si vérification de ce dernier.
+ Indication de la non vérification du fichier de
dessins Ascii.
+ Affichage des caractères non trouvés dans le
fichier de dessins Ascii.
+ Affichage des collisions entre dessins dûes aux
données CSV.
-vv : + Même affichage que le niveau 1.
+ Affichage de la construction du dessin Ascii.
-vvv : + Même affichage que le niveau 2.
+ Affichage de tous les dessins Ascii trouvés et
accessibles dans le fichier de dessins Ascii et
de leurs données CSV.
+ Affichage du dessin Ascci à ajouter et de
données de débogage.
+ Affichage plus détaillé de la construction du
texte Ascii.
-V,--version Afficher la version et quitter.
Fichier embarqué de dessins Ascii :
Le fichier embarqué /tmp/transcii.ascii est créé en cas d'utilisation.
Il n'est pas supprimé à la sortie du programme. Il reste disponible et n'est
pas recréé s'il existe déjà.
Il respecte le format décrit ci-dessous.
Particularité :
Il possède 2 dessins ayant la même clé 'car=ß' dans leur ligne CSV.
C'est pour illustrer la différence de comportement avec ou sans vérification.
Le caractère doublement défini est le 'ß' (non pas 'beta' mais 'eszett').
Cet «effet» permet d'avoir 2 jeux de caractères de dessins Ascii dans le même
fichier de dessins. Utilisation de l'un ou l'autre mais pas les 2 mélangés.
Essayez :
$ transcii -v ß
et
$ transcii -cv ß
Les parties Format et Vérification sont là pour ceux qui veulent comprendre
et/ou créer leur propre fichier de dessins d'Art Ascii.
Format du fichier de dessins Ascii :
- Commentaires en entête seulement et précédés du caractère '#' en début de
ligne. Des lignes vides peuvent séparer des blocs de commentaires et finir
le dernier bloc de commentaires.
- Pas de 'blancs' en fin de ligne, dessin Ascii compris.
- Toute ligne vide en dehors de l'entête du fichier sera comprise dans le
dessin Ascii décrit par la ligne CSV (voir Ligne CSV plus bas).
- Dessin Ascii - composé de :
* Une ligne de données CSV.
CSV = Comma Separated Values : Valeurs Séparées par des Virgules.
Ici, les Valeurs sont du format : Clé=Valeur[ Valeur2]…
appelées 'clé' désignant aussi bien la Clé que l'ensemble Clé=Valeurs…
* Les lignes suivantes composant le dessin Ascii jusqu'à la prochaine
ligne CSV rencontrée ou la fin de fichier.
- Ligne CSV - composée de :
* La clé 'car=1-seul-caractère' en début de ligne CSV (obligatoire).
* La clé 'zero=entier-relatif' (présence obligatoire dans la ligne CSV).
* Les autres clés sont facultatives.
* Noms et Formats des clés reconnues :
+ car - Format : car=1-Seul-Caractère
Exemple : car=A
Correspond au caractère à dessiner.
Une clé 'car=1-même-caractère' peut apparaître plusieurs fois dans le
fichier de dessins Ascii, définissant ainsi plusieurs dessins pour le
même caractère.
Dans ce cas là, sans vérification, le 1er dessin défini est gardé ;
avec vérification (option '-c'), le dernier dessin défini est gardé ;
tous les autres doublons sont inacessibles.
Tous les caractères 1 seule fois définis sont accessibles.
+ zero - Format : zero=entier-relatif
Exemple : zero=+2
Indique le nombre de lignes (en partant du haut) du dessin Ascii
à dessiner au dessus de la ligne de référence.
Positionne en hauteur le dessin Ascii.
Un nombre négatif descend le dessin.
+ after - Format : after=entier-relatif_liste-de-caractères…
Exemple : after=-3_AbcGX
Sépare ou serre les dessins entre eux.
En l'absence de cette clé, le dessin se colle contre le dessin
précédent sans entrer dans le rectangle minimal encadrant le dessin
Ascii précédent.
Le nombre correspond aux nombres d'espaces entre le dessin Ascii
précédent et celui décrit par la ligne CSV si le caractère précédent
est présent dans la liste de caractères.
Le caractère '_' est obligatoire et sépare le nombre de la liste.
Il est possible de mettre un nombre négatif, dans ce cas, cela serre
les dessins Ascii entre eux d'autant d'espace.
(Attention aux collisions entre dessins Ascii, signalées à partir du
niveau de verbosité 1).
Il est possible de mettre plusieurs 'nombre_liste'.
Il suffit de les séparer par un espace :
Exemple : after=-2_TFPVW 1_ABCD 2_XYZ
Toutefois, il faut faire attention à ce qu'un même caractère
n'apparaisse pas dans plusieurs listes.
+ profile - Format : profile=nombre_listecaractères ...
Exemple : profile=1_VW 2_Y
Même format que pour la clé after.
Le dessin Ascii épouse la forme du dessin Ascii précédent
si présent dans la liste en étant séparé du nombre d'espace indiqué
par le nombre attenant à la liste.
Les nombres négatifs ne sont pas admis, le 0 est admis.
+ Un caractère de liste ne peut apparaître qu'une seule fois dans les
clés 'after' et 'profile' réunies.
* Typiquement un dessin Ascii est décrit ainsi :
car=caractère,zero=[+|-]n[,after=[+|-n]_listcar[ [+|-]n_listcar]…][,profile=[+]n_listcar[ [+]n_listcar]…]
ligne Ascii
ligne Ascii
…
Exemple :
car=a,zero=2,after=-2_FT 1_ABCDEGHIJKLMNOPQRSUWXYZchi-,profile=1_V
/¯¯|
|__|_
Clé 'car' :
Le caractère 'a' dans le texte à convertir correspond à ce dessin.
Clé 'zero' :
La 2ième ligne du dessin est placée sur la ligne de référence.
Réglant ainsi la position en hauteur du dessin.
Clé 'after' :
Le dessin 'a' se serre de 2 espaces vers la gauche s'il vient après
un 'F' ou un 'T'.
Le dessin 'a' se sépare d'un espace vers la droite après un caractère
de la liste :
ABCDEGHIJKLMNOPQRSUWXYZchi-
Clé 'profile' :
Le dessin 'a' épouse la forme d'un 'V' précédent en étant distant
d'un epsace (moche, mais pour illustration).
* Cas particulier du caractère 'virgule' :
+ Il peut se décrire de 2 façons indifférenciées :
car=,,zero=… ou car=,zero=…
Ces 2 écritures sont équivalentes.
+ Si le caractère ',' doit être dans une liste d'une des clés 'after'
ou 'profile' alors la virgule doit être la dernière de la liste et
cette liste doit être la dernière de la clé CSV et la clé CSV doit
être la dernière de la ligne CSV.
Exemple : car=A,zero=6,profile=0_VY,after=-4_W 1_ABCD,
Dans ce cas, la dernière virgule sera considérée comme un
caractère de la liste : 'ABCD,'
Et le 'A' se séparera d'un espace après une virgule.
Vérification du fichier de dessins Ascii :
La vérification porte sur la validité de la ligne CSV décrivant le dessin :
- La clé 'car' doit n'avoir qu'un seul caractère comme valeur.
Sinon le dessin Ascii n'est pas accessible.
- Un caractère Ascii décrit ne peut apparaître qu'une seule fois dans le
fichier de dessins Ascii (valeur de la clé 'car).
Sinon, sans vérification, le 1er dessin est gardé; avec vérification,
le dernier est gardé.
Signalement au niveau de verbosité 1.
Erreur ne provoquant pas la sortie du script.
- La clé 'zero' doit être présente et sa valeur doit être un entier
relatif.
- Le format des valeurs des clés 'after' et 'profile' doit être du type :
[+|-][0-9]+_[[:print:]]+[ [+|-][0-9]+_[[:print:]]+]*
ou plus simplement :
nb_listcaractères …
Et nb ne doit pas être négatif dans la clé 'profile'.
- Pas de répétition de caractères dans les listes de caractères des clés
'after' et 'profile' réunies.
- Les lignes du fichier de dessins Ascii ne doivent pas se terminer par
un ou plusieurs blancs.
Ces blancs sont supprimés (avec avertissement au niveau de verbosité 1),
le fichier de dessins Ascii reste intact.
Erreur ne provoquant pas la sortie du script.
Variables d'environnement :
transcii accepte 2 variables d'environnement :
Draws : Fichier des dessins Ascii
Spaces : Nombre d'espaces finaux pour un espace dans le texte à convertir.
Elles prévalent sur l'affectation en dur dans ce script.
Les options '--draws' et '--spaces' prévalent sur les variables
d'environnement respectives.
Notes :
Une ligne de dessin par ligne de texte à convertir.
Une ligne vide est insérée en dessous de chaque ligne de texte convertie.
Tous les retours 'terminal' sont dirigés vers stderr sauf le résultat final
qui est dirigé vers la sortie standard.
Exemples d'utilisation avec le fichier de dessins embarqué :
$ transcii 'Hello world'
|¯¯| |¯¯|
| |__| | |\ |\ |\ |
| | | )| ) | ) |
| __ | | )| ) | ) |
| | | | /¯¯)|/ |/ /¯¯\ \ //¯¯\|/¯¯|/ /¯¯|
|__| |__| |___/\ /\ \__/ \/\/ \__/| /\ |__|
2023-06-23 transcii Tawal®©
Hé oui, ce n'est pas si simple
pour tout retour.
Dernière modification par Tawal (23-06-2023 09:20:56)
Comme la science n'est pas infuse, elle se diffuse.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !