Загрузить файлы в «venv/Lib/site-packages/pip/_vendor/pygments»
This commit is contained in:
104
venv/Lib/site-packages/pip/_vendor/pygments/scanner.py
Normal file
104
venv/Lib/site-packages/pip/_vendor/pygments/scanner.py
Normal file
@@ -0,0 +1,104 @@
|
|||||||
|
"""
|
||||||
|
pygments.scanner
|
||||||
|
~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
This library implements a regex based scanner. Some languages
|
||||||
|
like Pascal are easy to parse but have some keywords that
|
||||||
|
depend on the context. Because of this it's impossible to lex
|
||||||
|
that just by using a regular expression lexer like the
|
||||||
|
`RegexLexer`.
|
||||||
|
|
||||||
|
Have a look at the `DelphiLexer` to get an idea of how to use
|
||||||
|
this scanner.
|
||||||
|
|
||||||
|
:copyright: Copyright 2006-2025 by the Pygments team, see AUTHORS.
|
||||||
|
:license: BSD, see LICENSE for details.
|
||||||
|
"""
|
||||||
|
import re
|
||||||
|
|
||||||
|
|
||||||
|
class EndOfText(RuntimeError):
|
||||||
|
"""
|
||||||
|
Raise if end of text is reached and the user
|
||||||
|
tried to call a match function.
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
class Scanner:
|
||||||
|
"""
|
||||||
|
Simple scanner
|
||||||
|
|
||||||
|
All method patterns are regular expression strings (not
|
||||||
|
compiled expressions!)
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, text, flags=0):
|
||||||
|
"""
|
||||||
|
:param text: The text which should be scanned
|
||||||
|
:param flags: default regular expression flags
|
||||||
|
"""
|
||||||
|
self.data = text
|
||||||
|
self.data_length = len(text)
|
||||||
|
self.start_pos = 0
|
||||||
|
self.pos = 0
|
||||||
|
self.flags = flags
|
||||||
|
self.last = None
|
||||||
|
self.match = None
|
||||||
|
self._re_cache = {}
|
||||||
|
|
||||||
|
def eos(self):
|
||||||
|
"""`True` if the scanner reached the end of text."""
|
||||||
|
return self.pos >= self.data_length
|
||||||
|
eos = property(eos, eos.__doc__)
|
||||||
|
|
||||||
|
def check(self, pattern):
|
||||||
|
"""
|
||||||
|
Apply `pattern` on the current position and return
|
||||||
|
the match object. (Doesn't touch pos). Use this for
|
||||||
|
lookahead.
|
||||||
|
"""
|
||||||
|
if self.eos:
|
||||||
|
raise EndOfText()
|
||||||
|
if pattern not in self._re_cache:
|
||||||
|
self._re_cache[pattern] = re.compile(pattern, self.flags)
|
||||||
|
return self._re_cache[pattern].match(self.data, self.pos)
|
||||||
|
|
||||||
|
def test(self, pattern):
|
||||||
|
"""Apply a pattern on the current position and check
|
||||||
|
if it patches. Doesn't touch pos.
|
||||||
|
"""
|
||||||
|
return self.check(pattern) is not None
|
||||||
|
|
||||||
|
def scan(self, pattern):
|
||||||
|
"""
|
||||||
|
Scan the text for the given pattern and update pos/match
|
||||||
|
and related fields. The return value is a boolean that
|
||||||
|
indicates if the pattern matched. The matched value is
|
||||||
|
stored on the instance as ``match``, the last value is
|
||||||
|
stored as ``last``. ``start_pos`` is the position of the
|
||||||
|
pointer before the pattern was matched, ``pos`` is the
|
||||||
|
end position.
|
||||||
|
"""
|
||||||
|
if self.eos:
|
||||||
|
raise EndOfText()
|
||||||
|
if pattern not in self._re_cache:
|
||||||
|
self._re_cache[pattern] = re.compile(pattern, self.flags)
|
||||||
|
self.last = self.match
|
||||||
|
m = self._re_cache[pattern].match(self.data, self.pos)
|
||||||
|
if m is None:
|
||||||
|
return False
|
||||||
|
self.start_pos = m.start()
|
||||||
|
self.pos = m.end()
|
||||||
|
self.match = m.group()
|
||||||
|
return True
|
||||||
|
|
||||||
|
def get_char(self):
|
||||||
|
"""Scan exactly one char."""
|
||||||
|
self.scan('.')
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
return '<%s %d/%d>' % (
|
||||||
|
self.__class__.__name__,
|
||||||
|
self.pos,
|
||||||
|
self.data_length
|
||||||
|
)
|
||||||
247
venv/Lib/site-packages/pip/_vendor/pygments/sphinxext.py
Normal file
247
venv/Lib/site-packages/pip/_vendor/pygments/sphinxext.py
Normal file
@@ -0,0 +1,247 @@
|
|||||||
|
"""
|
||||||
|
pygments.sphinxext
|
||||||
|
~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Sphinx extension to generate automatic documentation of lexers,
|
||||||
|
formatters and filters.
|
||||||
|
|
||||||
|
:copyright: Copyright 2006-2025 by the Pygments team, see AUTHORS.
|
||||||
|
:license: BSD, see LICENSE for details.
|
||||||
|
"""
|
||||||
|
|
||||||
|
import sys
|
||||||
|
|
||||||
|
from docutils import nodes
|
||||||
|
from docutils.statemachine import ViewList
|
||||||
|
from docutils.parsers.rst import Directive
|
||||||
|
from sphinx.util.nodes import nested_parse_with_titles
|
||||||
|
|
||||||
|
|
||||||
|
MODULEDOC = '''
|
||||||
|
.. module:: %s
|
||||||
|
|
||||||
|
%s
|
||||||
|
%s
|
||||||
|
'''
|
||||||
|
|
||||||
|
LEXERDOC = '''
|
||||||
|
.. class:: %s
|
||||||
|
|
||||||
|
:Short names: %s
|
||||||
|
:Filenames: %s
|
||||||
|
:MIME types: %s
|
||||||
|
|
||||||
|
%s
|
||||||
|
|
||||||
|
%s
|
||||||
|
|
||||||
|
'''
|
||||||
|
|
||||||
|
FMTERDOC = '''
|
||||||
|
.. class:: %s
|
||||||
|
|
||||||
|
:Short names: %s
|
||||||
|
:Filenames: %s
|
||||||
|
|
||||||
|
%s
|
||||||
|
|
||||||
|
'''
|
||||||
|
|
||||||
|
FILTERDOC = '''
|
||||||
|
.. class:: %s
|
||||||
|
|
||||||
|
:Name: %s
|
||||||
|
|
||||||
|
%s
|
||||||
|
|
||||||
|
'''
|
||||||
|
|
||||||
|
|
||||||
|
class PygmentsDoc(Directive):
|
||||||
|
"""
|
||||||
|
A directive to collect all lexers/formatters/filters and generate
|
||||||
|
autoclass directives for them.
|
||||||
|
"""
|
||||||
|
has_content = False
|
||||||
|
required_arguments = 1
|
||||||
|
optional_arguments = 0
|
||||||
|
final_argument_whitespace = False
|
||||||
|
option_spec = {}
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
self.filenames = set()
|
||||||
|
if self.arguments[0] == 'lexers':
|
||||||
|
out = self.document_lexers()
|
||||||
|
elif self.arguments[0] == 'formatters':
|
||||||
|
out = self.document_formatters()
|
||||||
|
elif self.arguments[0] == 'filters':
|
||||||
|
out = self.document_filters()
|
||||||
|
elif self.arguments[0] == 'lexers_overview':
|
||||||
|
out = self.document_lexers_overview()
|
||||||
|
else:
|
||||||
|
raise Exception('invalid argument for "pygmentsdoc" directive')
|
||||||
|
node = nodes.compound()
|
||||||
|
vl = ViewList(out.split('\n'), source='')
|
||||||
|
nested_parse_with_titles(self.state, vl, node)
|
||||||
|
for fn in self.filenames:
|
||||||
|
self.state.document.settings.record_dependencies.add(fn)
|
||||||
|
return node.children
|
||||||
|
|
||||||
|
def document_lexers_overview(self):
|
||||||
|
"""Generate a tabular overview of all lexers.
|
||||||
|
|
||||||
|
The columns are the lexer name, the extensions handled by this lexer
|
||||||
|
(or "None"), the aliases and a link to the lexer class."""
|
||||||
|
from pip._vendor.pygments.lexers._mapping import LEXERS
|
||||||
|
from pip._vendor.pygments.lexers import find_lexer_class
|
||||||
|
out = []
|
||||||
|
|
||||||
|
table = []
|
||||||
|
|
||||||
|
def format_link(name, url):
|
||||||
|
if url:
|
||||||
|
return f'`{name} <{url}>`_'
|
||||||
|
return name
|
||||||
|
|
||||||
|
for classname, data in sorted(LEXERS.items(), key=lambda x: x[1][1].lower()):
|
||||||
|
lexer_cls = find_lexer_class(data[1])
|
||||||
|
extensions = lexer_cls.filenames + lexer_cls.alias_filenames
|
||||||
|
|
||||||
|
table.append({
|
||||||
|
'name': format_link(data[1], lexer_cls.url),
|
||||||
|
'extensions': ', '.join(extensions).replace('*', '\\*').replace('_', '\\') or 'None',
|
||||||
|
'aliases': ', '.join(data[2]),
|
||||||
|
'class': f'{data[0]}.{classname}'
|
||||||
|
})
|
||||||
|
|
||||||
|
column_names = ['name', 'extensions', 'aliases', 'class']
|
||||||
|
column_lengths = [max([len(row[column]) for row in table if row[column]])
|
||||||
|
for column in column_names]
|
||||||
|
|
||||||
|
def write_row(*columns):
|
||||||
|
"""Format a table row"""
|
||||||
|
out = []
|
||||||
|
for length, col in zip(column_lengths, columns):
|
||||||
|
if col:
|
||||||
|
out.append(col.ljust(length))
|
||||||
|
else:
|
||||||
|
out.append(' '*length)
|
||||||
|
|
||||||
|
return ' '.join(out)
|
||||||
|
|
||||||
|
def write_seperator():
|
||||||
|
"""Write a table separator row"""
|
||||||
|
sep = ['='*c for c in column_lengths]
|
||||||
|
return write_row(*sep)
|
||||||
|
|
||||||
|
out.append(write_seperator())
|
||||||
|
out.append(write_row('Name', 'Extension(s)', 'Short name(s)', 'Lexer class'))
|
||||||
|
out.append(write_seperator())
|
||||||
|
for row in table:
|
||||||
|
out.append(write_row(
|
||||||
|
row['name'],
|
||||||
|
row['extensions'],
|
||||||
|
row['aliases'],
|
||||||
|
f':class:`~{row["class"]}`'))
|
||||||
|
out.append(write_seperator())
|
||||||
|
|
||||||
|
return '\n'.join(out)
|
||||||
|
|
||||||
|
def document_lexers(self):
|
||||||
|
from pip._vendor.pygments.lexers._mapping import LEXERS
|
||||||
|
from pip._vendor import pygments
|
||||||
|
import inspect
|
||||||
|
import pathlib
|
||||||
|
|
||||||
|
out = []
|
||||||
|
modules = {}
|
||||||
|
moduledocstrings = {}
|
||||||
|
for classname, data in sorted(LEXERS.items(), key=lambda x: x[0]):
|
||||||
|
module = data[0]
|
||||||
|
mod = __import__(module, None, None, [classname])
|
||||||
|
self.filenames.add(mod.__file__)
|
||||||
|
cls = getattr(mod, classname)
|
||||||
|
if not cls.__doc__:
|
||||||
|
print(f"Warning: {classname} does not have a docstring.")
|
||||||
|
docstring = cls.__doc__
|
||||||
|
if isinstance(docstring, bytes):
|
||||||
|
docstring = docstring.decode('utf8')
|
||||||
|
|
||||||
|
example_file = getattr(cls, '_example', None)
|
||||||
|
if example_file:
|
||||||
|
p = pathlib.Path(inspect.getabsfile(pygments)).parent.parent /\
|
||||||
|
'tests' / 'examplefiles' / example_file
|
||||||
|
content = p.read_text(encoding='utf-8')
|
||||||
|
if not content:
|
||||||
|
raise Exception(
|
||||||
|
f"Empty example file '{example_file}' for lexer "
|
||||||
|
f"{classname}")
|
||||||
|
|
||||||
|
if data[2]:
|
||||||
|
lexer_name = data[2][0]
|
||||||
|
docstring += '\n\n .. admonition:: Example\n'
|
||||||
|
docstring += f'\n .. code-block:: {lexer_name}\n\n'
|
||||||
|
for line in content.splitlines():
|
||||||
|
docstring += f' {line}\n'
|
||||||
|
|
||||||
|
if cls.version_added:
|
||||||
|
version_line = f'.. versionadded:: {cls.version_added}'
|
||||||
|
else:
|
||||||
|
version_line = ''
|
||||||
|
|
||||||
|
modules.setdefault(module, []).append((
|
||||||
|
classname,
|
||||||
|
', '.join(data[2]) or 'None',
|
||||||
|
', '.join(data[3]).replace('*', '\\*').replace('_', '\\') or 'None',
|
||||||
|
', '.join(data[4]) or 'None',
|
||||||
|
docstring,
|
||||||
|
version_line))
|
||||||
|
if module not in moduledocstrings:
|
||||||
|
moddoc = mod.__doc__
|
||||||
|
if isinstance(moddoc, bytes):
|
||||||
|
moddoc = moddoc.decode('utf8')
|
||||||
|
moduledocstrings[module] = moddoc
|
||||||
|
|
||||||
|
for module, lexers in sorted(modules.items(), key=lambda x: x[0]):
|
||||||
|
if moduledocstrings[module] is None:
|
||||||
|
raise Exception(f"Missing docstring for {module}")
|
||||||
|
heading = moduledocstrings[module].splitlines()[4].strip().rstrip('.')
|
||||||
|
out.append(MODULEDOC % (module, heading, '-'*len(heading)))
|
||||||
|
for data in lexers:
|
||||||
|
out.append(LEXERDOC % data)
|
||||||
|
|
||||||
|
return ''.join(out)
|
||||||
|
|
||||||
|
def document_formatters(self):
|
||||||
|
from pip._vendor.pygments.formatters import FORMATTERS
|
||||||
|
|
||||||
|
out = []
|
||||||
|
for classname, data in sorted(FORMATTERS.items(), key=lambda x: x[0]):
|
||||||
|
module = data[0]
|
||||||
|
mod = __import__(module, None, None, [classname])
|
||||||
|
self.filenames.add(mod.__file__)
|
||||||
|
cls = getattr(mod, classname)
|
||||||
|
docstring = cls.__doc__
|
||||||
|
if isinstance(docstring, bytes):
|
||||||
|
docstring = docstring.decode('utf8')
|
||||||
|
heading = cls.__name__
|
||||||
|
out.append(FMTERDOC % (heading, ', '.join(data[2]) or 'None',
|
||||||
|
', '.join(data[3]).replace('*', '\\*') or 'None',
|
||||||
|
docstring))
|
||||||
|
return ''.join(out)
|
||||||
|
|
||||||
|
def document_filters(self):
|
||||||
|
from pip._vendor.pygments.filters import FILTERS
|
||||||
|
|
||||||
|
out = []
|
||||||
|
for name, cls in FILTERS.items():
|
||||||
|
self.filenames.add(sys.modules[cls.__module__].__file__)
|
||||||
|
docstring = cls.__doc__
|
||||||
|
if isinstance(docstring, bytes):
|
||||||
|
docstring = docstring.decode('utf8')
|
||||||
|
out.append(FILTERDOC % (cls.__name__, name, docstring))
|
||||||
|
return ''.join(out)
|
||||||
|
|
||||||
|
|
||||||
|
def setup(app):
|
||||||
|
app.add_directive('pygmentsdoc', PygmentsDoc)
|
||||||
203
venv/Lib/site-packages/pip/_vendor/pygments/style.py
Normal file
203
venv/Lib/site-packages/pip/_vendor/pygments/style.py
Normal file
@@ -0,0 +1,203 @@
|
|||||||
|
"""
|
||||||
|
pygments.style
|
||||||
|
~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Basic style object.
|
||||||
|
|
||||||
|
:copyright: Copyright 2006-2025 by the Pygments team, see AUTHORS.
|
||||||
|
:license: BSD, see LICENSE for details.
|
||||||
|
"""
|
||||||
|
|
||||||
|
from pip._vendor.pygments.token import Token, STANDARD_TYPES
|
||||||
|
|
||||||
|
# Default mapping of ansixxx to RGB colors.
|
||||||
|
_ansimap = {
|
||||||
|
# dark
|
||||||
|
'ansiblack': '000000',
|
||||||
|
'ansired': '7f0000',
|
||||||
|
'ansigreen': '007f00',
|
||||||
|
'ansiyellow': '7f7fe0',
|
||||||
|
'ansiblue': '00007f',
|
||||||
|
'ansimagenta': '7f007f',
|
||||||
|
'ansicyan': '007f7f',
|
||||||
|
'ansigray': 'e5e5e5',
|
||||||
|
# normal
|
||||||
|
'ansibrightblack': '555555',
|
||||||
|
'ansibrightred': 'ff0000',
|
||||||
|
'ansibrightgreen': '00ff00',
|
||||||
|
'ansibrightyellow': 'ffff00',
|
||||||
|
'ansibrightblue': '0000ff',
|
||||||
|
'ansibrightmagenta': 'ff00ff',
|
||||||
|
'ansibrightcyan': '00ffff',
|
||||||
|
'ansiwhite': 'ffffff',
|
||||||
|
}
|
||||||
|
# mapping of deprecated #ansixxx colors to new color names
|
||||||
|
_deprecated_ansicolors = {
|
||||||
|
# dark
|
||||||
|
'#ansiblack': 'ansiblack',
|
||||||
|
'#ansidarkred': 'ansired',
|
||||||
|
'#ansidarkgreen': 'ansigreen',
|
||||||
|
'#ansibrown': 'ansiyellow',
|
||||||
|
'#ansidarkblue': 'ansiblue',
|
||||||
|
'#ansipurple': 'ansimagenta',
|
||||||
|
'#ansiteal': 'ansicyan',
|
||||||
|
'#ansilightgray': 'ansigray',
|
||||||
|
# normal
|
||||||
|
'#ansidarkgray': 'ansibrightblack',
|
||||||
|
'#ansired': 'ansibrightred',
|
||||||
|
'#ansigreen': 'ansibrightgreen',
|
||||||
|
'#ansiyellow': 'ansibrightyellow',
|
||||||
|
'#ansiblue': 'ansibrightblue',
|
||||||
|
'#ansifuchsia': 'ansibrightmagenta',
|
||||||
|
'#ansiturquoise': 'ansibrightcyan',
|
||||||
|
'#ansiwhite': 'ansiwhite',
|
||||||
|
}
|
||||||
|
ansicolors = set(_ansimap)
|
||||||
|
|
||||||
|
|
||||||
|
class StyleMeta(type):
|
||||||
|
|
||||||
|
def __new__(mcs, name, bases, dct):
|
||||||
|
obj = type.__new__(mcs, name, bases, dct)
|
||||||
|
for token in STANDARD_TYPES:
|
||||||
|
if token not in obj.styles:
|
||||||
|
obj.styles[token] = ''
|
||||||
|
|
||||||
|
def colorformat(text):
|
||||||
|
if text in ansicolors:
|
||||||
|
return text
|
||||||
|
if text[0:1] == '#':
|
||||||
|
col = text[1:]
|
||||||
|
if len(col) == 6:
|
||||||
|
return col
|
||||||
|
elif len(col) == 3:
|
||||||
|
return col[0] * 2 + col[1] * 2 + col[2] * 2
|
||||||
|
elif text == '':
|
||||||
|
return ''
|
||||||
|
elif text.startswith('var') or text.startswith('calc'):
|
||||||
|
return text
|
||||||
|
assert False, f"wrong color format {text!r}"
|
||||||
|
|
||||||
|
_styles = obj._styles = {}
|
||||||
|
|
||||||
|
for ttype in obj.styles:
|
||||||
|
for token in ttype.split():
|
||||||
|
if token in _styles:
|
||||||
|
continue
|
||||||
|
ndef = _styles.get(token.parent, None)
|
||||||
|
styledefs = obj.styles.get(token, '').split()
|
||||||
|
if not ndef or token is None:
|
||||||
|
ndef = ['', 0, 0, 0, '', '', 0, 0, 0]
|
||||||
|
elif 'noinherit' in styledefs and token is not Token:
|
||||||
|
ndef = _styles[Token][:]
|
||||||
|
else:
|
||||||
|
ndef = ndef[:]
|
||||||
|
_styles[token] = ndef
|
||||||
|
for styledef in obj.styles.get(token, '').split():
|
||||||
|
if styledef == 'noinherit':
|
||||||
|
pass
|
||||||
|
elif styledef == 'bold':
|
||||||
|
ndef[1] = 1
|
||||||
|
elif styledef == 'nobold':
|
||||||
|
ndef[1] = 0
|
||||||
|
elif styledef == 'italic':
|
||||||
|
ndef[2] = 1
|
||||||
|
elif styledef == 'noitalic':
|
||||||
|
ndef[2] = 0
|
||||||
|
elif styledef == 'underline':
|
||||||
|
ndef[3] = 1
|
||||||
|
elif styledef == 'nounderline':
|
||||||
|
ndef[3] = 0
|
||||||
|
elif styledef[:3] == 'bg:':
|
||||||
|
ndef[4] = colorformat(styledef[3:])
|
||||||
|
elif styledef[:7] == 'border:':
|
||||||
|
ndef[5] = colorformat(styledef[7:])
|
||||||
|
elif styledef == 'roman':
|
||||||
|
ndef[6] = 1
|
||||||
|
elif styledef == 'sans':
|
||||||
|
ndef[7] = 1
|
||||||
|
elif styledef == 'mono':
|
||||||
|
ndef[8] = 1
|
||||||
|
else:
|
||||||
|
ndef[0] = colorformat(styledef)
|
||||||
|
|
||||||
|
return obj
|
||||||
|
|
||||||
|
def style_for_token(cls, token):
|
||||||
|
t = cls._styles[token]
|
||||||
|
ansicolor = bgansicolor = None
|
||||||
|
color = t[0]
|
||||||
|
if color in _deprecated_ansicolors:
|
||||||
|
color = _deprecated_ansicolors[color]
|
||||||
|
if color in ansicolors:
|
||||||
|
ansicolor = color
|
||||||
|
color = _ansimap[color]
|
||||||
|
bgcolor = t[4]
|
||||||
|
if bgcolor in _deprecated_ansicolors:
|
||||||
|
bgcolor = _deprecated_ansicolors[bgcolor]
|
||||||
|
if bgcolor in ansicolors:
|
||||||
|
bgansicolor = bgcolor
|
||||||
|
bgcolor = _ansimap[bgcolor]
|
||||||
|
|
||||||
|
return {
|
||||||
|
'color': color or None,
|
||||||
|
'bold': bool(t[1]),
|
||||||
|
'italic': bool(t[2]),
|
||||||
|
'underline': bool(t[3]),
|
||||||
|
'bgcolor': bgcolor or None,
|
||||||
|
'border': t[5] or None,
|
||||||
|
'roman': bool(t[6]) or None,
|
||||||
|
'sans': bool(t[7]) or None,
|
||||||
|
'mono': bool(t[8]) or None,
|
||||||
|
'ansicolor': ansicolor,
|
||||||
|
'bgansicolor': bgansicolor,
|
||||||
|
}
|
||||||
|
|
||||||
|
def list_styles(cls):
|
||||||
|
return list(cls)
|
||||||
|
|
||||||
|
def styles_token(cls, ttype):
|
||||||
|
return ttype in cls._styles
|
||||||
|
|
||||||
|
def __iter__(cls):
|
||||||
|
for token in cls._styles:
|
||||||
|
yield token, cls.style_for_token(token)
|
||||||
|
|
||||||
|
def __len__(cls):
|
||||||
|
return len(cls._styles)
|
||||||
|
|
||||||
|
|
||||||
|
class Style(metaclass=StyleMeta):
|
||||||
|
|
||||||
|
#: overall background color (``None`` means transparent)
|
||||||
|
background_color = '#ffffff'
|
||||||
|
|
||||||
|
#: highlight background color
|
||||||
|
highlight_color = '#ffffcc'
|
||||||
|
|
||||||
|
#: line number font color
|
||||||
|
line_number_color = 'inherit'
|
||||||
|
|
||||||
|
#: line number background color
|
||||||
|
line_number_background_color = 'transparent'
|
||||||
|
|
||||||
|
#: special line number font color
|
||||||
|
line_number_special_color = '#000000'
|
||||||
|
|
||||||
|
#: special line number background color
|
||||||
|
line_number_special_background_color = '#ffffc0'
|
||||||
|
|
||||||
|
#: Style definitions for individual token types.
|
||||||
|
styles = {}
|
||||||
|
|
||||||
|
#: user-friendly style name (used when selecting the style, so this
|
||||||
|
# should be all-lowercase, no spaces, hyphens)
|
||||||
|
name = 'unnamed'
|
||||||
|
|
||||||
|
aliases = []
|
||||||
|
|
||||||
|
# Attribute for lexers defined within Pygments. If set
|
||||||
|
# to True, the style is not shown in the style gallery
|
||||||
|
# on the website. This is intended for language-specific
|
||||||
|
# styles.
|
||||||
|
web_style_gallery_exclude = False
|
||||||
214
venv/Lib/site-packages/pip/_vendor/pygments/token.py
Normal file
214
venv/Lib/site-packages/pip/_vendor/pygments/token.py
Normal file
@@ -0,0 +1,214 @@
|
|||||||
|
"""
|
||||||
|
pygments.token
|
||||||
|
~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Basic token types and the standard tokens.
|
||||||
|
|
||||||
|
:copyright: Copyright 2006-2025 by the Pygments team, see AUTHORS.
|
||||||
|
:license: BSD, see LICENSE for details.
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
class _TokenType(tuple):
|
||||||
|
parent = None
|
||||||
|
|
||||||
|
def split(self):
|
||||||
|
buf = []
|
||||||
|
node = self
|
||||||
|
while node is not None:
|
||||||
|
buf.append(node)
|
||||||
|
node = node.parent
|
||||||
|
buf.reverse()
|
||||||
|
return buf
|
||||||
|
|
||||||
|
def __init__(self, *args):
|
||||||
|
# no need to call super.__init__
|
||||||
|
self.subtypes = set()
|
||||||
|
|
||||||
|
def __contains__(self, val):
|
||||||
|
return self is val or (
|
||||||
|
type(val) is self.__class__ and
|
||||||
|
val[:len(self)] == self
|
||||||
|
)
|
||||||
|
|
||||||
|
def __getattr__(self, val):
|
||||||
|
if not val or not val[0].isupper():
|
||||||
|
return tuple.__getattribute__(self, val)
|
||||||
|
new = _TokenType(self + (val,))
|
||||||
|
setattr(self, val, new)
|
||||||
|
self.subtypes.add(new)
|
||||||
|
new.parent = self
|
||||||
|
return new
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
return 'Token' + (self and '.' or '') + '.'.join(self)
|
||||||
|
|
||||||
|
def __copy__(self):
|
||||||
|
# These instances are supposed to be singletons
|
||||||
|
return self
|
||||||
|
|
||||||
|
def __deepcopy__(self, memo):
|
||||||
|
# These instances are supposed to be singletons
|
||||||
|
return self
|
||||||
|
|
||||||
|
|
||||||
|
Token = _TokenType()
|
||||||
|
|
||||||
|
# Special token types
|
||||||
|
Text = Token.Text
|
||||||
|
Whitespace = Text.Whitespace
|
||||||
|
Escape = Token.Escape
|
||||||
|
Error = Token.Error
|
||||||
|
# Text that doesn't belong to this lexer (e.g. HTML in PHP)
|
||||||
|
Other = Token.Other
|
||||||
|
|
||||||
|
# Common token types for source code
|
||||||
|
Keyword = Token.Keyword
|
||||||
|
Name = Token.Name
|
||||||
|
Literal = Token.Literal
|
||||||
|
String = Literal.String
|
||||||
|
Number = Literal.Number
|
||||||
|
Punctuation = Token.Punctuation
|
||||||
|
Operator = Token.Operator
|
||||||
|
Comment = Token.Comment
|
||||||
|
|
||||||
|
# Generic types for non-source code
|
||||||
|
Generic = Token.Generic
|
||||||
|
|
||||||
|
# String and some others are not direct children of Token.
|
||||||
|
# alias them:
|
||||||
|
Token.Token = Token
|
||||||
|
Token.String = String
|
||||||
|
Token.Number = Number
|
||||||
|
|
||||||
|
|
||||||
|
def is_token_subtype(ttype, other):
|
||||||
|
"""
|
||||||
|
Return True if ``ttype`` is a subtype of ``other``.
|
||||||
|
|
||||||
|
exists for backwards compatibility. use ``ttype in other`` now.
|
||||||
|
"""
|
||||||
|
return ttype in other
|
||||||
|
|
||||||
|
|
||||||
|
def string_to_tokentype(s):
|
||||||
|
"""
|
||||||
|
Convert a string into a token type::
|
||||||
|
|
||||||
|
>>> string_to_token('String.Double')
|
||||||
|
Token.Literal.String.Double
|
||||||
|
>>> string_to_token('Token.Literal.Number')
|
||||||
|
Token.Literal.Number
|
||||||
|
>>> string_to_token('')
|
||||||
|
Token
|
||||||
|
|
||||||
|
Tokens that are already tokens are returned unchanged:
|
||||||
|
|
||||||
|
>>> string_to_token(String)
|
||||||
|
Token.Literal.String
|
||||||
|
"""
|
||||||
|
if isinstance(s, _TokenType):
|
||||||
|
return s
|
||||||
|
if not s:
|
||||||
|
return Token
|
||||||
|
node = Token
|
||||||
|
for item in s.split('.'):
|
||||||
|
node = getattr(node, item)
|
||||||
|
return node
|
||||||
|
|
||||||
|
|
||||||
|
# Map standard token types to short names, used in CSS class naming.
|
||||||
|
# If you add a new item, please be sure to run this file to perform
|
||||||
|
# a consistency check for duplicate values.
|
||||||
|
STANDARD_TYPES = {
|
||||||
|
Token: '',
|
||||||
|
|
||||||
|
Text: '',
|
||||||
|
Whitespace: 'w',
|
||||||
|
Escape: 'esc',
|
||||||
|
Error: 'err',
|
||||||
|
Other: 'x',
|
||||||
|
|
||||||
|
Keyword: 'k',
|
||||||
|
Keyword.Constant: 'kc',
|
||||||
|
Keyword.Declaration: 'kd',
|
||||||
|
Keyword.Namespace: 'kn',
|
||||||
|
Keyword.Pseudo: 'kp',
|
||||||
|
Keyword.Reserved: 'kr',
|
||||||
|
Keyword.Type: 'kt',
|
||||||
|
|
||||||
|
Name: 'n',
|
||||||
|
Name.Attribute: 'na',
|
||||||
|
Name.Builtin: 'nb',
|
||||||
|
Name.Builtin.Pseudo: 'bp',
|
||||||
|
Name.Class: 'nc',
|
||||||
|
Name.Constant: 'no',
|
||||||
|
Name.Decorator: 'nd',
|
||||||
|
Name.Entity: 'ni',
|
||||||
|
Name.Exception: 'ne',
|
||||||
|
Name.Function: 'nf',
|
||||||
|
Name.Function.Magic: 'fm',
|
||||||
|
Name.Property: 'py',
|
||||||
|
Name.Label: 'nl',
|
||||||
|
Name.Namespace: 'nn',
|
||||||
|
Name.Other: 'nx',
|
||||||
|
Name.Tag: 'nt',
|
||||||
|
Name.Variable: 'nv',
|
||||||
|
Name.Variable.Class: 'vc',
|
||||||
|
Name.Variable.Global: 'vg',
|
||||||
|
Name.Variable.Instance: 'vi',
|
||||||
|
Name.Variable.Magic: 'vm',
|
||||||
|
|
||||||
|
Literal: 'l',
|
||||||
|
Literal.Date: 'ld',
|
||||||
|
|
||||||
|
String: 's',
|
||||||
|
String.Affix: 'sa',
|
||||||
|
String.Backtick: 'sb',
|
||||||
|
String.Char: 'sc',
|
||||||
|
String.Delimiter: 'dl',
|
||||||
|
String.Doc: 'sd',
|
||||||
|
String.Double: 's2',
|
||||||
|
String.Escape: 'se',
|
||||||
|
String.Heredoc: 'sh',
|
||||||
|
String.Interpol: 'si',
|
||||||
|
String.Other: 'sx',
|
||||||
|
String.Regex: 'sr',
|
||||||
|
String.Single: 's1',
|
||||||
|
String.Symbol: 'ss',
|
||||||
|
|
||||||
|
Number: 'm',
|
||||||
|
Number.Bin: 'mb',
|
||||||
|
Number.Float: 'mf',
|
||||||
|
Number.Hex: 'mh',
|
||||||
|
Number.Integer: 'mi',
|
||||||
|
Number.Integer.Long: 'il',
|
||||||
|
Number.Oct: 'mo',
|
||||||
|
|
||||||
|
Operator: 'o',
|
||||||
|
Operator.Word: 'ow',
|
||||||
|
|
||||||
|
Punctuation: 'p',
|
||||||
|
Punctuation.Marker: 'pm',
|
||||||
|
|
||||||
|
Comment: 'c',
|
||||||
|
Comment.Hashbang: 'ch',
|
||||||
|
Comment.Multiline: 'cm',
|
||||||
|
Comment.Preproc: 'cp',
|
||||||
|
Comment.PreprocFile: 'cpf',
|
||||||
|
Comment.Single: 'c1',
|
||||||
|
Comment.Special: 'cs',
|
||||||
|
|
||||||
|
Generic: 'g',
|
||||||
|
Generic.Deleted: 'gd',
|
||||||
|
Generic.Emph: 'ge',
|
||||||
|
Generic.Error: 'gr',
|
||||||
|
Generic.Heading: 'gh',
|
||||||
|
Generic.Inserted: 'gi',
|
||||||
|
Generic.Output: 'go',
|
||||||
|
Generic.Prompt: 'gp',
|
||||||
|
Generic.Strong: 'gs',
|
||||||
|
Generic.Subheading: 'gu',
|
||||||
|
Generic.EmphStrong: 'ges',
|
||||||
|
Generic.Traceback: 'gt',
|
||||||
|
}
|
||||||
153
venv/Lib/site-packages/pip/_vendor/pygments/unistring.py
Normal file
153
venv/Lib/site-packages/pip/_vendor/pygments/unistring.py
Normal file
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user