diff options
author | Flaviu Tamas <tamasflaviu@gmail.com> | 2015-01-15 19:53:31 -0500 |
---|---|---|
committer | Flaviu Tamas <tamasflaviu@gmail.com> | 2015-01-15 19:53:31 -0500 |
commit | a03d178a561e50259465ba8b8e9972fad73e9dbc (patch) | |
tree | 220886bed618a92bff5d2e372eeeba74a802c1cb /src/nre.nim | |
parent | c0c0920d198381060c643af53a14e4b0751f5c39 (diff) | |
download | Nim-a03d178a561e50259465ba8b8e9972fad73e9dbc.tar.gz |
Implement capture iterator
Diffstat (limited to 'src/nre.nim')
-rw-r--r-- | src/nre.nim | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/src/nre.nim b/src/nre.nim index f5eaaf418..1c803f27f 100644 --- a/src/nre.nim +++ b/src/nre.nim @@ -156,20 +156,25 @@ proc asTable*(pattern: CaptureBounds, default = None[Slice[int]]()): result = initTable[string, Option[Slice[int]]]() asTableImpl(nextVal.isNone) -template toSeqImpl(cond: bool): stmt {.immediate, dirty.} = - result = @[] +template itemsImpl(cond: bool): stmt {.immediate, dirty.} = for i in 0 .. <RegexMatch(pattern).pattern.captureCount: let nextVal = pattern[i] if cond: - result.add(default) + yield default else: - result.add(nextVal) + yield nextVal + +iterator items*(pattern: CaptureBounds, default = None[Slice[int]]()): Option[Slice[int]] = + itemsImpl(nextVal.isNone) + +iterator items*(pattern: Captures, default: string = nil): string = + itemsImpl(nextVal == nil) proc toSeq*(pattern: CaptureBounds, default = None[Slice[int]]()): seq[Option[Slice[int]]] = - toSeqImpl(nextVal.isNone) + accumulateResult(pattern.items(default)) proc toSeq*(pattern: Captures, default: string = nil): seq[string] = - toSeqImpl(nextVal == nil) + accumulateResult(pattern.items(default)) # }}} # Creation & Destruction {{{ |