diff --git a/lib/pure/htmlparser.nim b/lib/pure/htmlparser.nim
index fd58bed25d..1fe0b297ba 100644
--- a/lib/pure/htmlparser.nim
+++ b/lib/pure/htmlparser.nim
@@ -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 ````, like ``
``:
+ of tagP, tagInput, tagOption:
+ # some tags are common to have no ````, like ```` but
+ # allow ```` in `
`, `` and ```` 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))
diff --git a/tests/stdlib/thtmlparser2814.nim b/tests/stdlib/thtmlparser2814.nim
new file mode 100644
index 0000000000..968d390f13
--- /dev/null
+++ b/tests/stdlib/thtmlparser2814.nim
@@ -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 "that
" as children
+##
+##
+## - this
+## -
+##
that
+##
+##
+
+##
+##
+
+
+for ltype in [["dl","dd"], ["ul","li"]]:
+ let desc_item = if ltype[0]=="dl": "this" else: ""
+ let item = "$1<$2>that
$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") != "that
":
+ echo "case " & ltype[0] & " failed !"
+ quit(2)
+
+
+echo "true"