Hi Lukas, all
I'm finally working on a HTML petit parser (a very basic one, based on XML
petit parser) and I have a serious problem (well... besides my complete
ignorance about petit parser, he...)
I need to match this pattern:
openTag, contents, closeTag (that will be something like "<html> ...
</html>")
inlineTag (that will be something like
"<br/>")
openTag (that will be something like
"<link ...>" or "<img src='anUrl'>")
so, after try some variants... I came with this construct:
element
"[39] element ::= EmptyElemTag | STag content
ETag"
^(self inlineTag / (self openTag, content, self closeTag) / self
openTag)
==> [ :nodes | ].
openTag
^ $< asParser, qualified, whitespace optional, attributes, whitespace
optional, $> asParser
inlineTag
^ $< asParser, qualified, whitespace optional, attributes, whitespace
optional, '/>' asParser
closeTag
^'</' asParser , qualified , whitespace optional , $> asParser
so... the problem here is that the statement
self openTag, contents, self closeTag
matchs with
...
<link ...>
</html>
and for that reason, the resulting tree is invalid.
So, I need a way to ensure the openTag name is equal to the closeTag name.
How can I do that?
Cheers,
Esteban