Page 1 sur 2

Module TI-Python : table de caractères avec ASCII étendu !

Message non luPosté: 17 Déc 2018, 12:40
de critor
De quels caractères disposons-nous pour les affichages de scripts Python sur nos Pythonnettes ?

Nous pouvons utiliser la fonction chr(n) dans le script suivant afin de récupérer la table des caractères :
Code: Tout sélectionner
#0= MicroPython / TI-Nspire
#1= MicroPython / NumWorks
#2= MicroPython / Graph 90+E
#3= MicroPython / Graph 35/75+E
#4= CircuitPython / TI-Python
#5= Xcas / HP Prime
#6= KhiCAS / Graph 90+E
def getplatform():
  r=-1
  try:
    if chr(256)==chr(0):
      r=5+(not ("HP" in version()))
    else:
      r=4*(len(str(1/3))<18)
  except:
    try:
      bytearray
      r=3
    except:
      try:
        enumerate
        r=1
      except:
        r=2
  return r

def dig2hex(n):
  if n<10 : return str(n)
  else: return chr(ord("A")+n-10)

def chars(n=256):
  ncol,nlgn,slgn,platform=16,n/16,"CH|",getplatform()
  pchars=["\b\t\n\r","\t\n\0","\a\b\t\n\v\f\r","\3\b\n\r\x1b","\3\b\t\n\r\x1b","\n\f\0","\n\0"]
  schars=pchars[platform]
  for col in range(ncol):
    slgn+=dig2hex(col)
  print(""+slgn+"|\n--+"+"-"*ncol+"+")
  for lgn in range(nlgn):
    slgn=dig2hex(lgn)+"_|"
    for col in range(ncol):
      n=lgn*16+col
      car=chr(n)
      if car in schars:
        car=" "
      slgn+=car
    print(""+slgn+"|")


La Casio Graph 90+E accepte 256 codes de caractères (soit 8 bits).
Des codes 32 (0x20) à 126 (0x7e), on retrouve les 95 caractères affichables du standard ASCII-1967 (7 bits).
En-dessous du caractère de code 32 et au-dessus du caractère de code 126, la machine n'affiche que des espaces.
Elle n'est donc capable d'afficher que 95 caractères différents.

La Casio Graph 35/75+E avec l'application CasioPython a un comportement similaire mais nous réserves quelques surprises.
Oute les 95 caractères affichables de l'ASCII 7 bits, en-dessous du caractère de code 32 la machine nous rajoute un caractère en forme de rectangle. Et au-dessus du caractère de code 126 elle nous rajoute 97 caractères non identifiables, car constitués de pixels désordonnés, de quoi ravir les amateurs d'ascii-art ! :bj:
Au total la machine permet donc d'afficher 95+1+97=193 caractères différents.

Le logiciel web NumWorks malgré un comportement similaire est encore plus surprenant.
En plus des 95 caractères ASCII 7 bits, au-delà du caractère de code 126, elle nous rajoute 22 caractères spéciaux utilisés en sciences. Puis au-delà du code 151 (0x97), nous avons droit à 104 caractères à pixels désordonnés, mais en prime en niveaux de gris, de quoi pousser l'ascii-art à l'extrême comme tu peux le constater ci-contre... ainsi que 29 autres du même style en-dessous du code 32 ! :bj:
Au total nous avons donc 95+22+104+29=250 caractères visuellement différents.

1008510084La caculatrice NumWorks quant à elle diffère quelque peu.
En plus des 95 caractères ASCII 7 bits, au-delà du caractère de code 126, elle nous rajoute non pas 22 mais 23 caractères spéciaux utilisés en sciences. Puis au-delà du code 151 (0x97), nous avons droit non pas à des caractères à pixels désordonnés, mais à un point en écriture inversé... et pareil en-dessous du code 32.
Au total la machine offre donc 95+23+1 caractères visuellement différents.

La HP Prime en écriture Python a un comportement différent, dans le sens où la fonction chr(n) accepte des codes de caractères supérieurs à 255, mais pour boucler et donc afficher à nouveau les mêmes caractères qu'à partir du code 0.
En plus des 95 caractères ASCII 7 bits, nous avons 1 caractère en forme de rectangle.
La machine ne permet donc que 95+1=96 affichages de caractères différents.

La Graph 90+E avec l'application KhiCAS se comporte de façon similaire, mais est plus généreuse.
Aux 95 caractères ASCII 7 bits, elle rajoute 29 symboles utilisables pour les sciences dont un en couleur avant le code 32, 12 autres à partir du code 128 (0x80), 7 symboles permettant d'afficher sur plusieurs lignes de grandes parenthèses ou intégrales à partir du code 140 (0x8C), puis 15 autres symboles scientifiques dont encore un de couleur à partir du code 146 (0x92). :bj:
Nous avons donc au total 95+29+12+7+15=158 caractères différents affichables.

La TI-Nspire avec le programme Ndless MicroPython se comporte différemment en autorisant 1114112 codes de caractères différents (20 bits + 16 bits).
Sur les 7 premiers bits on retrouve les 95 caractères affichables de l'ASCII, un damier en code 127, et 27 caractères spéciaux divers en dessous du code 32.
A partir du code 128 on a accès à plein d'autres caractères spéciaux illustrant la richesse de la table de caractères TI-Nspire, mais hélas ils sont mal affichés à cause d'un bug, ils se voient préfixés d'un ou plusieurs caractères de contrôle. Ne pouvant ainsi être affichés proprement (en tant que caractère unique) par un script, nous ne pouvons donc pas les comptabiliser. :'(
La machine n'affiche donc au total que 95+1+27=123 caractères différents.

Donnons la priorité aux caractères standard saisissables donc facilement et utilisables sur différentes plateformes. Nous avons donc pour le moment le classement suivant :
  1. Casio Graph 90+E avec l'application KhiCAS et 158 caractères
  2. TI-Nspire avec le programme Ndless MicroPython et 123 caractères
  3. calculatrice NumWorks avec 119 caractères
  4. logiciel web NumWorks avec 250 caractères, mais dont seulement 117 caractères identifiables
  5. Casio Graph 35/75+E avec l'application CasioPython et 193 caractères, mais avec seulement 96 caractères identifiables
  6. HP Prime avec 96 caractères
  7. Casio Graph 90+E avec 95 caractères

9949Et où se classe le module TI-Python pour TI-83 Premium CE là-dedans ?
Déjà, il adopte un comportement similaire à celui de la TI-Nspire en autorisant lui aussi 1114112 codes différents.
Exécutons le script (photo ci-contre prise avec une ancienne version du script puisque nous ne disposons hélas toujours pas du module, l'affichage du nouveau script est reconstruit ci-dessous à partir des résultats observés) :
TI-Python a écrit:>>>chars(320)
CH|0123456789ABCDEF|
0_|□□□ □□□□ □□ □□|
1_|□□□□□□□□□□□ □□□□|
2_| !"#$%&'()*+,-./|
3_|0123456789:;<)>?|
4_|@ABCDEFGHIJKLMNO|
5_|PQRSTUVWXYZ[\]^_|
6_|`abcdefghijklmno|
7_|pqrstuvwxyz{|}~ |
8_|□∙◄►▲▼…⸥_Aa↑▒ |
9_| |
A_| ¡¢£¤¥¦§¨©ª«¬ ®¯|
B_|º±²³´µ¶·¸¹º»¼½¾¿|
C_|ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ|
D_|ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß|
E_|àáâãäåæçèéêëìíîï|
F_|ðñòóôõö÷øùúûüýþÿ|
G_|□□□□□□□□□□□□□□□□|
H_|□□□□□□□□□□□□□□□□|
I_|□□□□□□□□□□□□□□□□|
J_|□□□□□□□□□□□□□□□□|

On retrouve les 95 caractères affichables de l'ASCII 7 bits. En-dessous du code 32 on retrouve un caractère rectangle, ainsi qu'en code 128.
A compter du code 129, on note 13 caractères spécifiques à la TI-83 Premium CE. Puis surprise, à partir du code 161 (0xa1) on trouve 95 caractères provenant du code ASCII étendu ANSI (8 bits) avec donc entre autres plein de lettres accentuées et autres caractères spéciaux pour les pays d'Europe de l'Ouest. :bj:
Par contre au-delà du code 255 la calculatrice n'affiche plus rien d'intéressant, que des caractères rectangle.
Ce qui donne au total 95+1+13+95=204 caractères différents affichables.

Nous avons donc maintenant niveau classement :
  1. module TI-Python pour TI-83 Premium CE avec 204 caractères
  2. Casio Graph 90+E avec l'application KhiCAS et 158 caractères
  3. TI-Nspire avec le programme Ndless MicroPython et 123 caractères
  4. calculatrice NumWorks avec 119 caractères
  5. logiciel web NumWorks avec 250 caractères, mais dont seulement 117 caractères identifiables
  6. Casio Graph 35/75+E avec l'application CasioPython et 193 caractères, mais avec seulement 96 caractères identifiables
  7. HP Prime avec 96 caractères
  8. Casio Graph 90+E avec 95 caractères
Félicitations au module TI-Python, le seul à gérer de l'ASCII étendu, t'offrant ainsi pour tes scripts Python une richesse d'écriture et d'affichage à ce jour inégalée par la concurrence ! :bj:

Re: Module TI-Python : table de caractères avec ASCII étendu

Message non luPosté: 17 Déc 2018, 12:50
de Adriweb
Si je ne me trompe pas, sur TI-Nspire, la limitation vient peut-être de la lib nspireio, qui s'occupe donc de l'affichage/input/output en mode console. MicroPython en lui-même semble pouvoir gérer des choses relatives a l'unicode.

https://github.com/Vogtinator/nspire-io ... /charmap.h ne contient "pas grand chose" :P

Re: Module TI-Python : table de caractères avec ASCII étendu

Message non luPosté: 17 Déc 2018, 16:43
de ptijoz
sur NW on n'a pas les mêmes résultats entre ce que donne Workshop et la calculatrice physique.
exemple le code chr(151) donne le signe degré sur la calculatrice et pas dans Workshop.

Re: Module TI-Python : table de caractères avec ASCII étendu

Message non luPosté: 17 Déc 2018, 17:18
de critor
Ah, merci @ptitjoz. Je vais regarder ça et corriger alors. :)

Re: Module TI-Python : table de caractères avec ASCII étendu

Message non luPosté: 17 Déc 2018, 18:55
de jean-baptiste boric
Je tiens à préciser que les caractères corrompus de la NumWorks sont des débordements de tampon et ces glyphes ne sont pas stables d'un firmware à un autre. De plus, l'équipe NumWorks songe(ait?) à basculer vers de l'UTF-8, donc les caractères >= 0x7F risquent d'être redéfinis à moyen ou long terme.

Re: Module TI-Python : table de caractères avec ASCII étendu

Message non luPosté: 17 Déc 2018, 19:46
de Lephe
Je note également que la table étendue de KhiCAS ressemble fort à celle de FONTCHARACTER, l'encodage personnalisé de Casio, à quelques ajouts près :

Re: Module TI-Python : table de caractères avec ASCII étendu

Message non luPosté: 17 Déc 2018, 21:46
de critor
Voilà, j'ai tenté sur une vraie NumWorks :
1008410085

Toutefois avec juste le ° et l'espèce de caractère inversé avec un point en plus, ce n'est pas ça qui va chambouler le classement.

Re: Module TI-Python : table de caractères avec ASCII étendu

Message non luPosté: 17 Déc 2018, 21:54
de critor
Voilà, j'ai édité le test pour distinguer calculatrice NumWorks et logiciel web NumWorks.
Merci beaucoup @ptitjoz. :)

Re: Module TI-Python : table de caractères avec ASCII étendu

Message non luPosté: 17 Déc 2018, 23:14
de ptijoz
Merci Critor :)
Pour moi, le but n'est pas le classement en soi, mais de comprendre toutes ces différences.
entre les versions de firmwares, l'émulation sur workshop et l'émulateur javascript...
Pour info il y longtemps que j'avais exploré ces caractères ASCII et je m'étais toujours demandé pourquoi ces glyphes un peu particulier et je remercie Jean-Baptiste Boric de son explication qui éclaire ma curiosité. Alors on va attendre l'UTF-8... mais qu'est-ce que ça va apporter sur cette petite machine ?

Re: Module TI-Python : table de caractères avec ASCII étendu

Message non luPosté: 18 Déc 2018, 10:24
de parisse
Lephe a écrit:Je note également que la table étendue de KhiCAS ressemble fort à celle de FONTCHARACTER, l'encodage personnalisé de Casio, à quelques ajouts près :

Je n'ai rien fait pour ca. C'est juste l'affichage du SDK. En fait, les chaines sont codees en 8 bits, du coup sur les systemes qui supportent UTF8, on a de l'UTF8 avec un ou plusieurs octets par caractere, sur la Casio, c'est un octet par caractere. Ca pourrait etre de l'UTF8 si le SDK en supportait l'affichage mais cela necessiterait des fontes de caracteres supplementaires en ROM, donc peu de chances que ca se produise un jour...