[cpif] Problemas y (probable) solución para el tema BBCode/HTML

Jesus Cea jcea at argo.es
Sat Jun 30 20:25:34 CEST 2007


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Se pueden ver los problemas en http://perseverantia.com:8877/hilo/1042

Conversación en la sala de chat de python en jabberes:

"""
19:42,03 <Alvaro> escapar los corchetes en los atributos
19:42,06 <Alvaro> del html
19:42,17 <jcea> me parece bien
19:42,23 <jcea> todas estas cosas documentalas CLARITASSSSSSSSSSSSS
19:42,53 <jcea> y el bbcode debe quitar el escape cuando está desactivado
19:42,56 <jcea> para dejar la url igual
19:43,04 * jcea ve el tema cada vez más enrevesado
19:43,25 <Alvaro> lo mejor es no permitir el html :P
19:43,26 <jcea> al final lo más inteligente va a ser
19:43,34 <jcea> trabajar a un nivel más alto
19:43,49 <jcea> osea, en vez de pasar texto de un parser a otro
19:43,56 <jcea> pasar algo más arriba
19:43,56 <jcea> tokens, vaya
19:44,24 <jcea> asi se puede distinguir claramente
19:44,28 <jcea> qué es datos de usuario
19:44,35 <jcea> y dato generado por el parser
19:45,22 <jcea> asi una entrada de usuario sería una lista de tokens
19:45,34 <jcea> y cada parser en la cdena solo se preocupa de los tokens
"texto"
19:45,39 <jcea> todos los demás, los pasa transparentes
19:45,58 <jcea> osea, supon un objeto "tag"
19:46,01 <jcea> y otro "endtag"
19:46,03 <jcea> son objetos
19:46,15 <jcea> cuando se instancia "endtag", solo le dices qué tag cierra
19:46,28 <jcea> cuando se instancia "tag", se dice qué tag abre, y
posibles atributos
19:46,49 <jcea> una vez que todas las cadenas se pasan por todos los parsers
19:46,56 <jcea> tienes una larga cadena de tokens
19:47,06 <Alvaro> bien
19:47,11 <Alvaro> si escapo los [] va bien
19:47,11 <jcea> que puedes "aplanar" a texto llamando a un metodo
determiando definido
19:47,27 <Alvaro> '<a
href="&lceil;url=&apos;pepe&amp;luis&apos;&rceil;">hola</a>[/url]'
19:47,59 <jcea> yo creo que habría que palntearse lo de la secuencia de
tokens
19:48,05 <jcea> Soluciona todos los problemas de forma elegante
19:48,08 <Alvaro> hmmmmm
19:48,14 <Alvaro> dices pasar una lista de tokens
19:48,15 * Alvaro lee
19:48,18 <jcea> incluyendo el análisis de los anidamientos, por ejemplo
19:50,26 <Alvaro> te entiendo
19:50,38 <jcea> yo hasta veo el código más sencillo
19:50,49 <jcea> el metaparser coge todo el texto original
19:50,54 <jcea> y lo mete en un objeto "texto"
19:51,12 <jcea> los parsers solo interpretan los objetos textos. Los
demás los ignoran y los pasan tal cual
19:51,59 <Alvaro> >>> parsers.convert_to_html("""[url="<a
href='caca'>hola</a>"]adios[/url]""")
(False, '<a href="&lt;a
href=&amp;quot;caca&amp;quot;&gt;hola&lt;/a&gt;">adios</a>')

19:52,04 <Alvaro> por el momento esto tira
19:52,11 <jcea> yo es qu eya me pierdo con tanto scape
19:52,52 <jcea> sin olvidar que le temo a los problemas de seguridad
19:53,09 <Alvaro> lo que planteas no hace falta ni usar objetos
19:53,14 <Alvaro> puedes usar una tupla
19:53,25 <Alvaro> [("texto", parseame o no) ...]
19:53,48 <jcea> los detalles no me interesan
19:54,12 <jcea> siempre que el protocolo sea seguro, eficiente y simple!
19:54,17 <Alvaro> ej: ('<a href="asgas">',False), ('asgfasgasdg',True)
19:54,46 <jcea> lo de parseame, ponlo de primero
19:55,18 <jcea> ¿no lo ves tú infinitamente más simple así?
19:55,43 <Alvaro> si
19:55,59 <Alvaro> de hecho
19:56,05 <Alvaro> por ejemplo el parser de bbcode
19:56,13 <Alvaro> que con solo bbcode funciona bastante bien
19:56,23 <Alvaro> no habria ni que modificalo
19:56,30 <Alvaro> seria el metaparser el que le pase las cadenas a parsear
19:56,44 <jcea> hay qeu cambiar todo el tema de escapes
19:56,51 <jcea> zen of python
19:56,51 <Alvaro> es decir, el parser de bbcode solo habria que tocar
los escapes
19:57,03 <jcea> "si lo que te sale es complicado, SEGURO que hay una
forma más simple de hacerlo!"
19:57,12 <Alvaro> del resto, de si (parseame,"texto") todo eso se la sopla
19:57,20 <jcea> y no, debes pasarlo entero
19:57,24 <jcea> por cosas como
19:58,01 <jcea> (url,False),("perico",True),(/url,False)
19:58,16 <Alvaro> mh?
19:58,26 <Alvaro> no lo veo
19:58,30 * jcea pensando
19:58,35 * jcea muy espeso
19:58,48 <Alvaro> yo lo veo tal que asi
19:58,50 <Alvaro> tu le metes
19:59,08 <Alvaro> <a href="caca">bla bla [b]jsgjsag[/b] </a>
19:59,43 <Alvaro> el parser html te devuelve (false, '<a href="caca">'),
(true,"bla bla [b]jsgjsag[/b] "), (false,"</a>")
19:59,55 <jcea> y le pasas solo el true
19:59,56 <jcea> ok
19:59,58 <jcea> pero si tienes
20:00,05 <jcea> <a href="caca">bla bla [b]jsgjsag</a>[/b]
20:00,07 <jcea> te sale
20:00,24 <jcea>  (false, '<a href="caca">'), (true,"bla bla
[b]jsgjsag"), (false,"</a>"), (true,"[/b"])
20:00,30 <Alvaro> sasto
20:00,35 <jcea> cuando le pasas el primer true, no encuentra el final
20:00,37 <Alvaro> y el 2 y 4 te darian error
20:00,38 <jcea> asi que error de anidamiento
20:00,47 <jcea> vale, no tiene mala pinta
20:00,59 <Alvaro> si te fijas
20:01,08 <jcea> la gran ventaja d este esquema es qeu cada parser se
traga lo suyo e ignora los otros
20:01,12 <jcea> asi eliminas dependencias
20:01,17 <jcea> que es la madre del cordero en todo el asunto
20:01,18 <Alvaro> eso iba a decir
20:01,21 <Alvaro> que eliminas las dependencias
20:01,23 <Alvaro> es decir
20:01,26 <jcea> pue snada
20:01,29 <jcea> ¿cuanto te lleva?
20:01,31 <jcea> :-)
20:01,32 <Alvaro> el parser de bbcode se preocupa *solo* de bbcode
20:01,44 <Alvaro> y el de html *solo* de los tags html
20:01,52 <jcea> si, eso es lo mejor
20:01,53 <Alvaro> no del texto libre/texto entre los tags
20:02,03 <Alvaro> de eso se encarga el bbcode
20:02,21 <Alvaro> pues me voy a ir a duchar
20:02,25 <Alvaro> pero no creo que mucho tiempo
20:02,28 <Alvaro> hay que tocar pocas cosas
20:02,42 * jcea a la espera
20:02,50 <Alvaro> nada como discutir para clarificar ideas
20:02,52 <Alvaro> :)
20:03,07 <jcea> es que los escapes van introduciendo dependencias
20:03,16 <jcea> solucion, no tener que escapar
20:03,19 <Alvaro> sip
20:03,26 <jcea> o si alguien escapa algo, lo marca
20:03,39 <jcea> de todas formas aparentemente el codigo
20:03,45 <jcea> queda más simple
20:03,54 <jcea> aparte de solucionar estos problemillas
20:03,59 <jcea> zen of python!!!!!!!!!!
20:04,01 <jcea> :)
20:05,49 <jcea> "si algo es complicado en python, es que lo estás
haciendo mal"
"""

- --
Jesus Cea Avion                         _/_/      _/_/_/        _/_/_/
jcea at argo.es http://www.argo.es/~jcea/ _/_/    _/_/  _/_/    _/_/  _/_/
jabber / xmpp:jcea at jabber.org         _/_/    _/_/          _/_/_/_/_/
                               _/_/  _/_/    _/_/          _/_/  _/_/
"Things are not so easy"      _/_/  _/_/    _/_/  _/_/    _/_/  _/_/
"My name is Dump, Core Dump"   _/_/_/        _/_/_/      _/_/  _/_/
"El amor es poner tu felicidad en la felicidad de otro" - Leibniz
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iQCVAwUBRoagHZlgi5GaxT1NAQIyrgP+LDG9If4Eu4lrbNG9pmn+1uxzdFHgW1Ee
NfBDsinyhtDurhsV6Y5L72AdEFNAitVKrXdq+6/n5xaEEMx66YmvFkT0IfS/SGPX
Rp46v7t65uuCGI94oDyIIaXgvp7a68FQHs2h3gMoe+PcMfQ94fFg8UwB/5HWtmNn
ITMw2d+z2kA=
=0DEA
-----END PGP SIGNATURE-----



More information about the cpif mailing list