Expose pattern and input string

This commit is contained in:
Flaviu Tamas 2015-01-10 19:19:25 -05:00
commit 4f4a7dfa5b

View file

@ -17,11 +17,13 @@ type
captureNameToId: Table[string, int] captureNameToId: Table[string, int]
RegexMatch* = ref object RegexMatch* = ref object
pattern: Regex pattern*: Regex ## The regex doing the matching.
inputStr: string ## Not nil.
str*: string ## The string that was matched against.
## Not nil.
pcreMatchBounds: seq[Slice[cint]] ## First item is the bounds of the match pcreMatchBounds: seq[Slice[cint]] ## First item is the bounds of the match
## Other items are the captures ## Other items are the captures
## `a` is inclusive start, `b` is exclusive end ## `a` is inclusive start, `b` is exclusive end
matchCache: seq[string] matchCache: seq[string]
Captures* = distinct RegexMatch Captures* = distinct RegexMatch
@ -83,7 +85,7 @@ proc `[]`*(self: Captures, i: int): string =
# capture count, plus the entire string # capture count, plus the entire string
self.matchCache = newSeq[string](self.pattern.captureCount + 1) self.matchCache = newSeq[string](self.pattern.captureCount + 1)
if self.matchCache[i + 1] == nil: if self.matchCache[i + 1] == nil:
self.matchCache[i + 1] = self.inputStr[bounds.a .. bounds.b-1] self.matchCache[i + 1] = self.str[bounds.a .. bounds.b-1]
return self.matchCache[i + 1] return self.matchCache[i + 1]
else: else:
return nil return nil
@ -255,7 +257,7 @@ proc exec*(self: Regex, str: string, start = 0): Option[RegexMatch] =
var result: RegexMatch var result: RegexMatch
new(result) new(result)
result.pattern = self result.pattern = self
result.inputStr = str result.str = str
# See PCRE man pages. # See PCRE man pages.
# 2x capture count to make room for start-end pairs # 2x capture count to make room for start-end pairs
# 1x capture count as slack space for PCRE # 1x capture count as slack space for PCRE