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.
Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)
Tchat 100% gratuit -Discutez en toute liberté