]>
jfr.im git - dlqueue.git/blob - venv/lib/python3.11/site-packages/pip/_vendor/pygments/scanner.py
5 This library implements a regex based scanner. Some languages
6 like Pascal are easy to parse but have some keywords that
7 depend on the context. Because of this it's impossible to lex
8 that just by using a regular expression lexer like the
11 Have a look at the `DelphiLexer` to get an idea of how to use
14 :copyright: Copyright 2006-2023 by the Pygments team, see AUTHORS.
15 :license: BSD, see LICENSE for details.
20 class EndOfText(RuntimeError):
22 Raise if end of text is reached and the user
23 tried to call a match function.
31 All method patterns are regular expression strings (not
32 compiled expressions!)
35 def __init__(self
, text
, flags
=0):
37 :param text: The text which should be scanned
38 :param flags: default regular expression flags
41 self
.data_length
= len(text
)
50 """`True` if the scanner reached the end of text."""
51 return self
.pos
>= self
.data_length
52 eos
= property(eos
, eos
.__doc
__)
54 def check(self
, pattern
):
56 Apply `pattern` on the current position and return
57 the match object. (Doesn't touch pos). Use this for
62 if pattern
not in self
._re
_cache
:
63 self
._re
_cache
[pattern
] = re
.compile(pattern
, self
.flags
)
64 return self
._re
_cache
[pattern
].match(self
.data
, self
.pos
)
66 def test(self
, pattern
):
67 """Apply a pattern on the current position and check
68 if it patches. Doesn't touch pos.
70 return self
.check(pattern
) is not None
72 def scan(self
, pattern
):
74 Scan the text for the given pattern and update pos/match
75 and related fields. The return value is a boolean that
76 indicates if the pattern matched. The matched value is
77 stored on the instance as ``match``, the last value is
78 stored as ``last``. ``start_pos`` is the position of the
79 pointer before the pattern was matched, ``pos`` is the
84 if pattern
not in self
._re
_cache
:
85 self
._re
_cache
[pattern
] = re
.compile(pattern
, self
.flags
)
86 self
.last
= self
.match
87 m
= self
._re
_cache
[pattern
].match(self
.data
, self
.pos
)
90 self
.start_pos
= m
.start()
92 self
.match
= m
.group()
96 """Scan exactly one char."""
100 return '<%s %d/%d>' % (
101 self
.__class
__.__name
__,