diff --git a/lib/impure/re.nim b/lib/impure/re.nim
index a0d88d82f..a3fb86332 100755
--- a/lib/impure/re.nim
+++ b/lib/impure/re.nim
@@ -136,6 +136,24 @@ proc find*(s: string, pattern: TRegEx, start = 0): int =
## match, -1 is returned.
var matches: array[0..maxSubpatterns-1, string]
result = find(s, pattern, matches, start)
+
+iterator findAll*(s: string, pattern: TRegEx, start = 0): string =
+ ## yields all matching captures of pattern in `s`.
+ var matches: array[0..MaxSubpatterns-1, string]
+ var i = start
+ while true:
+ var j = find(s, pattern, matches, i)
+ if j < 0: break
+ i = j
+ for k in 0..maxSubPatterns-1:
+ if isNil(matches[k]): break
+ inc(i, matches[k].len)
+ yield matches[k]
+
+proc findAll*(s: string, pattern: TRegEx, start = 0): seq[string] =
+ ## returns all matching captures of pattern in `s`.
+ ## If it does not match, @[] is returned.
+ accumulateResult(findAll(s, pattern, start))
template `=~` *(s: string, pattern: TRegEx): expr =
## This calls ``match`` with an implicit declared ``matches`` array that
diff --git a/lib/pure/htmlparser.nim b/lib/pure/htmlparser.nim
index 104c53833..d84688be6 100755
--- a/lib/pure/htmlparser.nim
+++ b/lib/pure/htmlparser.nim
@@ -269,6 +269,7 @@ proc expected(x: var TXmlParser, n: PXmlNode): string =
proc untilElementEnd(x: var TXmlParser, result: PXmlNode,
errors: var seq[string]) =
+ # we parsed e.g. ``
`` and don't really expect a ````:
if result.htmlTag in singleTags:
if x.kind != xmlElementEnd or cmpIgnoreCase(x.elementName, result.tag) != 0:
return
@@ -277,10 +278,15 @@ proc untilElementEnd(x: var TXmlParser, result: PXmlNode,
of xmlElementStart, xmlElementOpen:
case result.htmlTag
of tagLi, tagP, tagDt, tagDd, tagInput, tagOption:
- if htmlTag(x.elementName) notin InlineTags:
- # some tags are common to have no ````, like ``