Skip to content

Commit

Permalink
Add raw_end and raw_start in Match class
Browse files Browse the repository at this point in the history
  • Loading branch information
Toilal committed Oct 18, 2015
1 parent 66ad914 commit d214392
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 1 deletion.
44 changes: 43 additions & 1 deletion rebulk/match.py
Original file line number Diff line number Diff line change
Expand Up @@ -404,6 +404,8 @@ def __init__(self, start, end, value=None, name=None, tags=None, marker=None, pa
self.pattern = pattern
self.private = private
self.children = []
self._raw_start = None
self._raw_end = None

@property
def span(self):
Expand Down Expand Up @@ -436,6 +438,46 @@ def value(self, value):
"""
self._value = value # pylint: disable=attribute-defined-outside-init

@property
def raw_start(self):
"""
start index of raw value
:return:
:rtype:
"""
if self._raw_start is None:
return self.start
return self._raw_start

@raw_start.setter
def raw_start(self, value):
"""
Set start index of raw value
:return:
:rtype:
"""
self._raw_start = value

@property
def raw_end(self):
"""
end index of raw value
:return:
:rtype:
"""
if self._raw_end is None:
return self.end
return self._raw_end

@raw_end.setter
def raw_end(self, value):
"""
Set end index of raw value
:return:
:rtype:
"""
self._raw_end = value

@property
def raw(self):
"""
Expand All @@ -444,7 +486,7 @@ def raw(self):
:rtype:
"""
if self.input_string:
return self.input_string[self.start:self.end]
return self.input_string[self.raw_start:self.raw_end]
return None

def crop(self, *crops, predicate=None, index=None):
Expand Down
20 changes: 20 additions & 0 deletions rebulk/test/test_match.py
Original file line number Diff line number Diff line change
Expand Up @@ -367,6 +367,26 @@ def test_filters(self):
selection = matches.named("2-re", lambda m: "re" in m.tags, index=1000)
assert selection is None

def test_raw(self):
input_string = "0123456789"

match = Match(0, 10, input_string=input_string, formatter=lambda s: s*2)

assert match.value == match.raw * 2
assert match.raw == input_string

match.raw_end = 9
match.raw_start = 1

assert match.value == match.raw * 2
assert match.raw == input_string[1:9]

match.raw_end = None
match.raw_start = None

assert match.value == match.raw * 2
assert match.raw == input_string

def test_to_dict(self):
input_string = "One Two Two Three"

Expand Down

0 comments on commit d214392

Please sign in to comment.