[cpif] Heimy: Ojito con esto: tags anidados

Jesus Cea jcea at argo.es
Thu Jul 12 21:54:56 CEST 2007


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

Para el tema del parsing recursivo:

El parser debe permitir anidar tags sin problemas. Osea, debe poder
parsear correctamente "<b>hola</b><b>adios</b>" y
"<b>hola<b>adios</b>hola2</b>". El problema está a la hora de encontrar
el tag final. No se puede hacer una búsqueda desde atrás del texto, ni
desde delante sin comprobar que no se abran tags nuevos por el camino.

Manteniendo estado internamente, una solución simple es tener una pila
interna en la que vamos metiendo y sacando cosas a medida que
encontramos tags nuevos. A priori la pila debe extenderse para contener
todos los parsers posibles, ya que queremos obligar a que los tags se
aniden correctamente. Si cuando terminamos con la cadena, en la pila aún
queda algo, es que nos hemos dejado tags sin cerrar.

Si te curras un "parse tree", básicamente la pila es el contexto que te
vas manteniendo cuando recorres el árbol.

De hecho el parser de demo que tienes en el SVN falla si le meto lo
siguiente:

[b]bold[b]HOLA[/b][/b]

Su salida es, incorrectamente:

<b>bold[b]HOLA</b>[/b]

El asunto se complica por momentos.

- --
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

iQCVAwUBRpaHEJlgi5GaxT1NAQJH/QP9EQlIbUQRufxGxBZqZtDOEtxxk//ng/WZ
Lok3CesU8OlrdgG67utQCebdX+NEVoJEincjbGp49TagUHkfbyUxGMd9OUyPww+o
2/kymRdC/7zb1XBO6CzEzYa1S2C/0caLqEmv/BWQ7pmtVA8UXikcnufzM+uc9PVI
oCrp7MF+g/U=
=6aLL
-----END PGP SIGNATURE-----



More information about the cpif mailing list