Merge branch 'htmlparser' of https://github.com/Lompik/Nim into Lompik-htmlparser

This commit is contained in:
Andreas Rumpf
2016-07-28 20:48:38 +02:00
2 changed files with 52 additions and 2 deletions

View File

@@ -464,12 +464,18 @@ proc untilElementEnd(x: var XmlParser, result: XmlNode,
case x.kind
of xmlElementStart, xmlElementOpen:
case result.htmlTag
of tagLi, tagP, tagDt, tagDd, tagInput, tagOption:
# some tags are common to have no ``</end>``, like ``<li>``:
of tagP, tagInput, tagOption:
# some tags are common to have no ``</end>``, like ``<li>`` but
# allow ``<p>`` in `<dd>`, `<dt>` and ``<li>`` in next case
if htmlTag(x.elemName) in {tagLi, tagP, tagDt, tagDd, tagInput,
tagOption}:
errors.add(expected(x, result))
break
of tagDd, tagDt, tagLi:
if htmlTag(x.elemName) in {tagLi, tagDt, tagDd, tagInput,
tagOption}:
errors.add(expected(x, result))
break
of tagTd, tagTh:
if htmlTag(x.elemName) in {tagTr, tagTd, tagTh, tagTfoot, tagThead}:
errors.add(expected(x, result))

View File

@@ -0,0 +1,44 @@
discard """
output: true
"""
import htmlparser
import xmltree
import strutils
from streams import newStringStream
## builds the two cases below and test that
## ``//[dd,li]`` has "<p>that</p>" as children
##
## <dl>
## <dt>this</dt>
## <dd>
## <p>that</p>
## </dd>
## </dl>
##
## <ul>
## <li>
## <p>that</p>
## </li>
## </ul>
for ltype in [["dl","dd"], ["ul","li"]]:
let desc_item = if ltype[0]=="dl": "<dt>this</dt>" else: ""
let item = "$1<$2><p>that</p></$2>" % [desc_item, ltype[1]]
let list = """ <$1>
$2
</$1> """ % [ltype[0], item]
var errors : seq[string] = @[]
let parseH = parseHtml(newStringStream(list),"statichtml", errors =errors)
if $parseH.findAll(ltype[1])[0].child("p") != "<p>that</p>":
echo "case " & ltype[0] & " failed !"
quit(2)
echo "true"