Mise en forme de code: pensez à utiliser les balises [ tcl ] et [ /tcl ] (sans les espaces bien sûr) autour de vos codes tcl afin d'avoir un meilleur rendu et une coloration syntaxique. x


Hack anti-emoji / Unicode
#1
Les emojis récents utilisent des caractères UTF-8 codés sur trop de bits pour TCL, ce qui provoque un crash de l'eggdrop lorsqu'il traite des lignes en contenant.

La première astuce est de recompiler TCL en changeant la valeur de TCL_UTF_MAX qui est par défaut à 3 (dans TCL 8.x, il est à 4 dans TCL 9.x). Mais ce n'est pas à la portée du premier venu et tout le monde n'a pas la possibilité de recompiler TCL.

L'autre option, je l'ai trouvée sur https://gitlab.com/dbohdan/twtxt.tcl et elle consiste à détecter ces caractères et les remplacer. Dans le script initial qui génère du contenu HTML, l'auteur utilise des images. Pour ma part, je remplace par ":emoji:"

Le code comprend 2 parties. La première sert juste à remplir une variable (à mettre en global) qui informe des possibilités de traitement de l'UTF:

tcl
set canUnicode [expr {[string length [encoding convertfrom utf-8 \xF0\x9F\xA4\x94]]==1}]


La seconde est celle qui nettoie le texte:

tcl
proc emoji {text} {
    if {$::canUnicode == 1} { return $text }
    if {$text eq {}} { return {} }
    set result {}
    foreach {_ before high low} [regexp -all -inline {([^\uD800-\uDBFF]*)(?:([\uD800-\uDBFF])([\uDC00-\uDFFF]))?} $text] {
        set em ""
        if {$high ne {}} {
            set em ":emoji:"
        }
        lappend result $before $em
    }
    return [join $result]
}


Et dans chaque procédure pouvant potentiellement recevoir du texte avec de l'unicode, il suffit d'avoir en début de procédure la ligne set text [::emoji $text]

N'hésitez pas à aller visiter le github de twtxt.tcl pour voir la procédure initiale et ses possibilités.
Zeolia - Offrez-moi un café
Merci de ne pas demander d'aide en MP
Away
  Reply
#2
Si je comprends bien. Les Émojis sont remplacés par :emoji: à la place du code ou de l'émoji en question grâce à la procédure que tu fournis, lors qu'UTF n'ais pas pris en compte ?

Parce que je ne comprends pas la partie de "canUnicode" ce que ça fait réellement

Quand tu dis

Quote:La première sert juste à remplir une variable (à mettre en global) qui informe des possibilités de traitement de l'UTF
J'aimerais savoir ce qui est sous-entendu par
Quote: possibilités de traitement de l'UTF
? s'il te plait.

Si nous avons la possibilité de modifier la valeur de TCL_UTF_MAX, qu'elle est la valeur à mettre ? 4 comme dans TCL 9.x ? Ou 8 ? pour avoir un l'UTF-8 ?

Ce changement peut causer d'autres problèmes ? si la réponse est non, devons-nous suggérer à TCL de changer cette valeur par défaut et pourquoi ils ne l'ont pas fait ?

Désolé pour toutes mes questions, j'avoue qu'UTF, Unicode, ainsi etc, je sais que c'est des encodages et qu'UTF est assez universel, mais au déjà ça. je ne connais pas bien et vu qu'on a en pleins dedans, c'est peut-être l'occasion d'apprendre plus.

Merci, car dans un de mes scripts, je désire ajouter des textes avec des émojis et ça crée des soucis d'encodage. (parce que c'est à la mode pour les tchats d'avoir des émojis et de les utiliser comme manière d'expressions, parce que sinon c'est un vieux truc pourri pour reprendre ce qui m'a été rapporté)


EDIT:
J'allais oublier mes émojis, je les prends d'ici : https://raw.githubusercontent.com/thelou...lemap.json
Retrouvez les dernières modifications de mes scripts TCL (versions Alpha/Bêta) ainsi que d'autres de mes réalisations sur ma page GitHub et les versions stables dans la section scripts de ce site  8-)
  Reply
#3
(27/09/2022, 14:21)ZarTek Wrote: Si je comprends bien. Les Émojis sont remplacés par :emoji: à la place du code ou de l'émoji en question grâce à la procédure que tu fournis, lors qu'UTF n'ais pas pris en compte ?

Parce que je ne comprends pas la partie de "canUnicode" ce que ça fait réellement
Il suffit de lire le code. La fonction vérifie les possibilités unicode de TCL, pour après ne pas avoir à exécuter la procédure emoji si l'eggdrop est capable de les traiter.

(27/09/2022, 14:21)ZarTek Wrote: Quand tu dis
Quote:La première sert juste à remplir une variable (à mettre en global) qui informe des possibilités de traitement de l'UTF
J'aimerais savoir ce qui est sous-entendu par
Quote: possibilités de traitement de l'UTF
? s'il te plait.
Rien n'est sous-entendu : si les chaines UTF8 encodées sur plus de 3 bits sont correctement interprétés, tout va bien.

(27/09/2022, 14:21)ZarTek Wrote: Si nous avons la possibilité de modifier la valeur de TCL_UTF_MAX, qu'elle est la valeur à mettre ? 4 comme dans TCL 9.x ? Ou 8 ? pour avoir un l'UTF-8 ?

Ce changement peut causer d'autres problèmes ? si la réponse est non, devons-nous suggérer à TCL de changer cette valeur par défaut et pourquoi ils ne l'ont pas fait ?
Le mieux est de mettre 4, l'autre valeur possible est 6 mais c'est purement expérimental

Liens utiles: https://core.tcl-lang.org/tips/doc/trunk/tip/542.md et https://core.tcl-lang.org/tips/doc/trunk/tip/622.md
Zeolia - Offrez-moi un café
Merci de ne pas demander d'aide en MP
Away
  Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)