summary refs log tree commit diff stats
path: root/src/nre.nim
diff options
context:
space:
mode:
authorFlaviu Tamas <tamasflaviu@gmail.com>2015-01-15 19:53:31 -0500
committerFlaviu Tamas <tamasflaviu@gmail.com>2015-01-15 19:53:31 -0500
commita03d178a561e50259465ba8b8e9972fad73e9dbc (patch)
tree220886bed618a92bff5d2e372eeeba74a802c1cb /src/nre.nim
parentc0c0920d198381060c643af53a14e4b0751f5c39 (diff)
downloadNim-a03d178a561e50259465ba8b8e9972fad73e9dbc.tar.gz
Implement capture iterator
Diffstat (limited to 'src/nre.nim')
-rw-r--r--src/nre.nim17
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 {{{