Forum du serveur Computercraft FR
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
-21%
Le deal à ne pas rater :
LEGO® Icons 10329 Les Plantes Miniatures, Collection Botanique
39.59 € 49.99 €
Voir le deal

[API] char (table des caractères)

2 participants

Aller en bas

[API] char (table des caractères) Empty [API] char (table des caractères)

Message par skypop Jeu 8 Sep - 20:12

Une API pour simplifier l'accès aux caractères spéciaux.

Pour info (depuis la version ComputerCraft 1.76), 256 caractères sont disponibles via la fonction string.char( num )
num étant un nombre entier, compris entre 0 et 255

La fonctionnalité de l'API char est similaire aux API colors et keys. J'ai rétribué à chaque code  le nom du caractère auquel il fait référence.

http://pastebin.com/nPRYvMQk
Code:
pastebin get nPRYvMQk char

Usage :

Code:
os.loadAPI("char")

print(char.upArrow) -- flèche pointant vers le haut

print(char.copyright)

print(char.Agrave) -- À


Références :

J'ai fait un effort de recherche pour essayer de ne pas attribuer de noms fantaisistes à certains caractères.
Autant que possible, je me suis référé à ces sources :

  • http://www.unicode.org/charts/
  • http://www.lookuptables.com/index/web.gif
  • http://www.unicode.org/Public/MAPPINGS/VENDORS/MISC/IBMGRAPH.TXT
  • http://www.fileformat.info/info/charset/UTF-8/encode.htm


J'ai cherché à faire un truc exhaustif, même si je me doute bien que l'API sera surtout utile pour afficher différentes flèches et curseurs, moins pour afficher des caractères accentués.
Mais pour certains cas particuliers j'ai du improviser, et ça nécessiterait peut être quelques corrections.

Pour les caractères accentués, j'ai repris la dénomination des entités html : http://www.lookuptables.com/index/web.gif
Pour les caractères les plus obscures, à fin de vérification, j'ai employé cette astuce :
Code:
textutils.urlEncode( string.char(29) )
Cela retourne le caractère encodé du style : %1D
Code que je reprend et utilise comme référence dans une recherche sur le net. C'est comme ça que j'ai pu démystifier les nombreux caractères blancs.

Code:
leftRightArrow=string.char(29) -- confirm ?
Je suppose qu'il s'agit d'une double flèche gauche/droite, pas très ressemblante du fait de la faible résolution. Je n'ai pas trouvé plus convainquant.
Le mieux que j'ai trouvé est 'INFORMATION SEPARATOR THREE' (U+001D) mais sans visuel pour confirmer.
http://www.fileformat.info/info/unicode/char/001d/index.htm

char.teletext_100000
J'ai cherché en vain la référence exacte. Ce que j'ai trouvé de plus approchant, sont dénommé "Block Elements", "Quadrant". Mais ceux là sont subdivisé en 4 et non en 6..
J'ai donc improvisé cette norme, le nombre binaire qui suit décrit dans l'ordre si un carré est plein ou vide. (haut gauche, haut droit, milieu gauche, milieu droit, bas gauche, bas droit) (1 == plein, 0 == vide)
N'oubliez pas que toutes les combinaisons possibles ne sont pas disponibles. Pour y parvenir il faut bidouiller et intervertir les couleurs du texte et background. (impossible sur une imprimante CC, car il n'y a pas de couleur d'arrière plan)


Avertissement: fs.write() / settings.set() / settings.save()

Vous ne pouvez pas utiliser string.char() ou l'API char pour écrire dans un fichier. Soit c'est un bug, soit c'est impossible.
La seule application est à l'écriture sur l'écran, ou sur papier via l'imprimante.
Vous ne pourrez (à priori) pas non plus enregistrer des chaînes contenant ces caractères via l'API settings, puisqu'elle repose également sur l'écriture dans un fichier.

edit: en fait non.. Je sais plus pourquoi je l'ai cru..

NB: sur les caractères blancs.

S'ils produisent le même résultat à l'écran (ou sur le papier), il n'en est rien dans le code. Ce qui signifie que deux chaines de textes identiques en apparence peuvent être strictement différentes dans une comparaison.
Code:
text_1 = "Hello World"
text_3 = "Hello"..string.char(32).."World"
text_3 = "Hello"..string.char(160).."World"

print(text_1) -- Hello World
print(text_2) -- Hello World
print(text_3) -- Hello World

print(text_1 == text_2) -- true
print(text_1 == text_3) -- false

Constats de bugs:

char.euro / string.char(128)
Le résultat est un caractère blanc, mais son code semble faire réfèrence au symbole €
http://www.fileformat.info/info/unicode/char/0080/browsertest.htm

char.nbsp / string.char(160)
En français s’appelle "espace insécable" (non-breaking space), c'est à dire identique à un espace, mais ne se coupe pas en bout de ligne. C'est utile en terme de norme typographique (conventions). Enfin, pas dans ComputerCraft. S'il est bien différent d'un espace standard (comparaison de chaînes) il se comporte comme un espace standard (il n'empêche pas la séparation de deux mots par un retour à la ligne)


Dernière édition par skypop le Sam 10 Sep - 13:33, édité 1 fois
skypop
skypop

Messages : 95
Date d'inscription : 25/07/2016

Revenir en haut Aller en bas

[API] char (table des caractères) Empty Re: [API] char (table des caractères)

Message par skypop Jeu 8 Sep - 20:39

Ingame, j'ai imprimé et relié ce livre, et c'est plutôt pratique de l'avoir sous la main en programmant.
Si vous seriez intéressé d'en recevoir un exemplaire, faites moi signe.

[API] char (table des caractères) 1afea556db
skypop
skypop

Messages : 95
Date d'inscription : 25/07/2016

Revenir en haut Aller en bas

L'auteur de ce message est actuellement banni du forum - Voir le message

[API] char (table des caractères) Empty Re: [API] char (table des caractères)

Message par skypop Ven 9 Sep - 2:14

Comme on ferait IRL : en passant le papier plusieurs fois, en changeant l'encre et ce qu'il faut imprimer.
skypop
skypop

Messages : 95
Date d'inscription : 25/07/2016

Revenir en haut Aller en bas

[API] char (table des caractères) Empty Re: [API] char (table des caractères)

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum