eserandour / Minitel1B_Hard

Minitel Library for Arduino (with HardwareSerial)
GNU General Public License v3.0
28 stars 10 forks source link

correction bug dans la fonction correction #12

Closed iodeo closed 1 year ago

iodeo commented 1 year ago

Lors d'un appui sur la touche CORRECTION, le dernier caractère du texte est sensé être supprimé Or pour supprimer un caractère spécial dans un objet String, il faut retirer plusieurs octets ! Cela se voit par l'apparition d'un caractère ⸮ dans le moniteur série

Je commence par un test pour détecter s'il s'agit d'un caractère spécial Le cas échéant je cherche l'index correspondant à son premier octet Puis je supprime l'ensemble

eserandour commented 1 year ago

Mince, je n'avais pas vu ce problème. Par contre ton correctif crée un autre problème chez moi, si j'appuie par exemple sur é, puis sur la touche CORRECTION, alors la touche ENVOI ne fonctionne plus.

iodeo commented 1 year ago

Ay.. j'ai du me gourrer qq part Ça avait l'air de fonctionner sur ma version de test local Je vérifie demain

Le jeu. 2 mars 2023 à 23:27, 3615 @.***> a écrit :

Mince, je n'avais pas vu ce problème. Par contre ton correctif crée un autre problème chez moi, si j'appuie par exemple sur é, puis sur la touche CORRECTION, alors la touche ENVOI ne fonctionne plus.

— Reply to this email directly, view it on GitHub https://github.com/eserandour/Minitel1B_Hard/pull/12#issuecomment-1452643572, or unsubscribe https://github.com/notifications/unsubscribe-auth/AG2KQHL5D4GSZGFOSTC45GDW2ENGNANCNFSM6AAAAAAVN5GC4I . You are receiving this because you authored the thread.Message ID: @.***>

iodeo commented 1 year ago

Je n'arrive pas à reproduire ton bug L'esp32 utilise la même classe String que le Uno apparemment Je vois pas d'où ça peut venir :/

eserandour commented 1 year ago

Je pense avoir résolu le problème en ajoutant une nouvelle fonction : int getNbBytes(unsigned long code) à utiliser en association avec String getString(unsigned long code) afin de déterminer le nombre d'octets utilisés pour un caractère codé en UTF-8. J'utilise également un cache pour enregistrer la taille en octets des caractères spéciaux au fur et à mesure qu'on en ajoute ou en enlève. L'exemple a été mis à jour et permet de visualiser ce qui se passe au niveau des variables.

eserandour commented 1 year ago

J'ai également mis en commentaires à la fin du programme TestCaracteresSpeciaux.ino une version qui n'utilise pas de cache et qui s'inspire de ta proposition.

eserandour commented 1 year ago

La version sans cache est la meilleure (plus performante). Je l'ai mise en version par défaut.

eserandour commented 1 year ago

Nouvelle mise à jour qui tient compte des différences entre l'ATmega 1284P et l'ESP32.