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


[Résolu] Codes couleurs protégés ?
#1
Pour une fois, je poste pour faire travailler vos neurones.

Je me suis aperçu que lorsqu'il y a un code couleur dans un fichier externe au tcl, le tcl le protège et donc ne peut pas l'interpréter.

Pour faire simple:

Fichier source:

Code:
test : \002(\037)¯¯¯¯)¯¯¯¯¯¯¯¯¯¯¯\037)~~~\002
Script :

Code:
bind pub - "!read" goread

set filei "databases/small.db"
proc goread { user host handle chan args } {
   set fp [open $::filei "r"]
   set line [gets $fp]
   putserv "PRIVMSG #canal :$line"
   close $fp
}
Rendu : la ligne telle que présente dans le source, avec les \

Tests faits:

Code:
regsub -all -- \\\\ $line \ line
   regsub -all -- \\\\ $line \\ line
   regsub -all -- \\\\0 $line \\0 line
   regsub -all -- \\\\0(\d{1,} $line \\0\1 line
   regsub -all -- \\\\ $line "a" line
L'avant dernier fait perdre tout ce qui est coloré, le dernier provoque bien le remplacement du \ de la source par un a, donc il doit bien exister une astuce pour que le code soit interprété, non ?

Des idées ?
irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
#2
Un join sur la chaîne de caractères contenant des codes de style les interprètera, si toutefois j'ai bien compris ton problème en lisant vite fait.
Toute l'actualité de mes scripts ici     (dernière mise à jour le 22/04/2020)

Tout programme comporte au moins un bug et pourrait être raccourci d'au moins une instruction, de quoi l'on peut déduire que tout programme peut être réduit à une seule instruction qui ne fonctionne pas.
#3
Bravo ! Ce n'est vraiment pas une idée que j'aurais eue.
irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
#4
Et un string map serait pas une solution aussi pour les chaines de caractères ?
#5
Non, ça n'a aucun rapport.
Le souci était que les codes couleurs ne sont pas interprétés, ce n'est pas (comme je le croyais au départ) un problème de substitution.
irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
#6
Je redonne l'explication qui a été donnée sur IRC afin que tout le monde puisse en profiter.

Les codes de style sont neutralisés dans les listes sans nécessiter de doubles antislash (\\) devant, ce qui peut être un peu perturbant puisqu'on s'attendrait par conséquent à ce qu'ils soient interprétés :

Quote:<MenzAgitat> .tcl return {ceci est un \00304test\003}
<Boole> Tcl: ceci est un \00304test\003
<MenzAgitat> .tcl return [join {ceci est un \00304test\003}]
<Boole> Tcl: ceci est un test
Toute l'actualité de mes scripts ici     (dernière mise à jour le 22/04/2020)

Tout programme comporte au moins un bug et pourrait être raccourci d'au moins une instruction, de quoi l'on peut déduire que tout programme peut être réduit à une seule instruction qui ne fonctionne pas.
#7
Et donc, il semblerait que gets retourne une liste et non pas une chaine.
Je ne sais pas s'il y a un moyen de vérifier ça
irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
#8
salut,
si mes souvenirs sont bon (et oui je n'ai pas codé depuis un moment) gets protège la liste de la façon suivante:

Code:
un petit {\00301test} {[test]} \{test\}
un moyen simple de vérifier l'état de la liste est de la réécrire directement dans un fichier avec
Code:
puts $file $line
(à vérifier quand même)
C'est en reconnaissant ses erreurs que l'on progresse ;)
Away


Possibly Related Threads…
Thread Author Replies Views Last Post
  Probleme sur deux codes tcl... heretoc 14 7,677 03/05/2009, 22:27
Last Post: CrazyCat
  Les codes couleurs dans les scripts... CrazyCat 2 9,156 13/04/2009, 11:33
Last Post: CrazyCat

Forum Jump:


Users browsing this thread: 1 Guest(s)