| @@ 208-231 (lines=24) @@ | ||
| 205 | def __call__(self, text, rules=None): |
|
| 206 | return self.parse(text, rules) |
|
| 207 | ||
| 208 | def parse(self, text, rules=None): |
|
| 209 | text = text.rstrip('\n') |
|
| 210 | ||
| 211 | if not rules: |
|
| 212 | rules = self.default_rules |
|
| 213 | ||
| 214 | def manipulate(text): |
|
| 215 | for key in rules: |
|
| 216 | rule = getattr(self.rules, key) |
|
| 217 | m = rule.match(text) |
|
| 218 | if not m: |
|
| 219 | continue |
|
| 220 | getattr(self, 'parse_%s' % key)(m) |
|
| 221 | return m |
|
| 222 | return False # pragma: no cover |
|
| 223 | ||
| 224 | while text: |
|
| 225 | m = manipulate(text) |
|
| 226 | if m is not False: |
|
| 227 | text = text[len(m.group(0)):] |
|
| 228 | continue |
|
| 229 | if text: # pragma: no cover |
|
| 230 | raise RuntimeError('Infinite loop at: %s' % text) |
|
| 231 | return self.tokens |
|
| 232 | ||
| 233 | def parse_newline(self, m): |
|
| 234 | length = len(m.group(0)) |
|
| @@ 195-218 (lines=24) @@ | ||
| 192 | def __call__(self, text, rules=None): |
|
| 193 | return self.parse(text, rules) |
|
| 194 | ||
| 195 | def parse(self, text, rules=None): |
|
| 196 | text = text.rstrip('\n') |
|
| 197 | ||
| 198 | if not rules: |
|
| 199 | rules = self.default_rules |
|
| 200 | ||
| 201 | def manipulate(text): |
|
| 202 | for key in rules: |
|
| 203 | rule = getattr(self.rules, key) |
|
| 204 | m = rule.match(text) |
|
| 205 | if not m: |
|
| 206 | continue |
|
| 207 | getattr(self, 'parse_%s' % key)(m) |
|
| 208 | return m |
|
| 209 | return False # pragma: no cover |
|
| 210 | ||
| 211 | while text: |
|
| 212 | m = manipulate(text) |
|
| 213 | if m is not False: |
|
| 214 | text = text[len(m.group(0)):] |
|
| 215 | continue |
|
| 216 | if text: # pragma: no cover |
|
| 217 | raise RuntimeError('Infinite loop at: %s' % text) |
|
| 218 | return self.tokens |
|
| 219 | ||
| 220 | def parse_newline(self, m): |
|
| 221 | length = len(m.group(0)) |
|