| 305 | '(?::((?:\\\\.|[^\\\\>]+)+)?)?)?>))') |
| 306 | |
| 307 | def _itertokens(self, rule): |
| 308 | offset, prefix = 0, '' |
| 309 | for match in self.rule_syntax.finditer(rule): |
| 310 | prefix += rule[offset:match.start()] |
| 311 | g = match.groups() |
| 312 | if len(g[0])%2: # Escaped wildcard |
| 313 | prefix += match.group(0)[len(g[0]):] |
| 314 | offset = match.end() |
| 315 | continue |
| 316 | if prefix: |
| 317 | yield prefix, None, None |
| 318 | name, filtr, conf = g[4:7] if g[2] is None else g[1:4] |
| 319 | yield name, filtr or 'default', conf or None |
| 320 | offset, prefix = match.end(), '' |
| 321 | if offset <= len(rule) or prefix: |
| 322 | yield prefix+rule[offset:], None, None |
| 323 | |
| 324 | def add(self, rule, method, target, name=None): |
| 325 | ''' Add a new rule or replace the target for an existing rule. ''' |