summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPradyun Gedam <pradyunsg@users.noreply.github.com>2022-10-10 02:10:31 +0100
committerPradyun Gedam <pradyunsg@users.noreply.github.com>2022-10-11 00:13:43 +0100
commit99eab68bf959e4c71c2688e4b1675ce9147ee785 (patch)
treea57fdf2f6f99e5a93e86265975de9e5c86d6c19a
parent2e7f88e71d41442e66e97cffdaabd49be3093405 (diff)
downloadpip-99eab68bf959e4c71c2688e4b1675ce9147ee785.tar.gz
Upgrade pygments to 2.13.0
-rw-r--r--news/pygments.vendor.rst1
-rw-r--r--src/pip/_vendor/pygments/__init__.py19
-rw-r--r--src/pip/_vendor/pygments/cmdline.py9
-rw-r--r--src/pip/_vendor/pygments/filters/__init__.py7
-rw-r--r--src/pip/_vendor/pygments/formatters/__init__.py16
-rw-r--r--src/pip/_vendor/pygments/formatters/_mapping.py67
-rw-r--r--src/pip/_vendor/pygments/formatters/img.py12
-rw-r--r--src/pip/_vendor/pygments/lexers/__init__.py20
-rw-r--r--src/pip/_vendor/pygments/lexers/_mapping.py67
-rw-r--r--src/pip/_vendor/pygments/lexers/python.py27
-rw-r--r--src/pip/_vendor/pygments/plugin.py35
-rw-r--r--src/pip/_vendor/pygments/styles/__init__.py4
-rw-r--r--src/pip/_vendor/pygments/token.py1
-rw-r--r--src/pip/_vendor/vendor.txt2
14 files changed, 100 insertions, 187 deletions
diff --git a/news/pygments.vendor.rst b/news/pygments.vendor.rst
new file mode 100644
index 000000000..0e5f7c580
--- /dev/null
+++ b/news/pygments.vendor.rst
@@ -0,0 +1 @@
+Upgrade pygments to 2.13.0
diff --git a/src/pip/_vendor/pygments/__init__.py b/src/pip/_vendor/pygments/__init__.py
index 52ff035dd..7185e5376 100644
--- a/src/pip/_vendor/pygments/__init__.py
+++ b/src/pip/_vendor/pygments/__init__.py
@@ -26,7 +26,7 @@
"""
from io import StringIO, BytesIO
-__version__ = '2.12.0'
+__version__ = '2.13.0'
__docformat__ = 'restructuredtext'
__all__ = ['lex', 'format', 'highlight']
@@ -38,10 +38,10 @@ def lex(code, lexer):
"""
try:
return lexer.get_tokens(code)
- except TypeError as err:
- if (isinstance(err.args[0], str) and
- ('unbound method get_tokens' in err.args[0] or
- 'missing 1 required positional argument' in err.args[0])):
+ except TypeError:
+ # Heuristic to catch a common mistake.
+ from pip._vendor.pygments.lexer import RegexLexer
+ if isinstance(lexer, type) and issubclass(lexer, RegexLexer):
raise TypeError('lex() argument must be a lexer instance, '
'not a class')
raise
@@ -62,10 +62,10 @@ def format(tokens, formatter, outfile=None): # pylint: disable=redefined-builti
return realoutfile.getvalue()
else:
formatter.format(tokens, outfile)
- except TypeError as err:
- if (isinstance(err.args[0], str) and
- ('unbound method format' in err.args[0] or
- 'missing 1 required positional argument' in err.args[0])):
+ except TypeError:
+ # Heuristic to catch a common mistake.
+ from pip._vendor.pygments.formatter import Formatter
+ if isinstance(formatter, type) and issubclass(formatter, Formatter):
raise TypeError('format() argument must be a formatter instance, '
'not a class')
raise
@@ -80,4 +80,3 @@ def highlight(code, lexer, formatter, outfile=None):
it is returned as a string.
"""
return format(lex(code, lexer), formatter, outfile)
-
diff --git a/src/pip/_vendor/pygments/cmdline.py b/src/pip/_vendor/pygments/cmdline.py
index 349c626f1..de73b06b4 100644
--- a/src/pip/_vendor/pygments/cmdline.py
+++ b/src/pip/_vendor/pygments/cmdline.py
@@ -25,7 +25,7 @@ from pip._vendor.pygments.formatters.latex import LatexEmbeddedLexer, LatexForma
from pip._vendor.pygments.formatters import get_all_formatters, get_formatter_by_name, \
load_formatter_from_file, get_formatter_for_filename, find_formatter_class
from pip._vendor.pygments.formatters.terminal import TerminalFormatter
-from pip._vendor.pygments.formatters.terminal256 import Terminal256Formatter
+from pip._vendor.pygments.formatters.terminal256 import Terminal256Formatter, TerminalTrueColorFormatter
from pip._vendor.pygments.filters import get_all_filters, find_filter_class
from pip._vendor.pygments.styles import get_all_styles, get_style_by_name
@@ -445,7 +445,9 @@ def main_inner(parser, argns):
return 1
else:
if not fmter:
- if '256' in os.environ.get('TERM', ''):
+ if os.environ.get('COLORTERM','') in ('truecolor', '24bit'):
+ fmter = TerminalTrueColorFormatter(**parsed_opts)
+ elif '256' in os.environ.get('TERM', ''):
fmter = Terminal256Formatter(**parsed_opts)
else:
fmter = TerminalFormatter(**parsed_opts)
@@ -636,6 +638,9 @@ def main(args=sys.argv):
try:
return main_inner(parser, argns)
+ except BrokenPipeError:
+ # someone closed our stdout, e.g. by quitting a pager.
+ return 0
except Exception:
if argns.v:
print(file=sys.stderr)
diff --git a/src/pip/_vendor/pygments/filters/__init__.py b/src/pip/_vendor/pygments/filters/__init__.py
index 5c99ce271..c302a6c0c 100644
--- a/src/pip/_vendor/pygments/filters/__init__.py
+++ b/src/pip/_vendor/pygments/filters/__init__.py
@@ -69,13 +69,16 @@ class CodeTagFilter(Filter):
`codetags` : list of strings
A list of strings that are flagged as code tags. The default is to
- highlight ``XXX``, ``TODO``, ``BUG`` and ``NOTE``.
+ highlight ``XXX``, ``TODO``, ``FIXME``, ``BUG`` and ``NOTE``.
+
+ .. versionchanged:: 2.13
+ Now recognizes ``FIXME`` by default.
"""
def __init__(self, **options):
Filter.__init__(self, **options)
tags = get_list_opt(options, 'codetags',
- ['XXX', 'TODO', 'BUG', 'NOTE'])
+ ['XXX', 'TODO', 'FIXME', 'BUG', 'NOTE'])
self.tag_re = re.compile(r'\b(%s)\b' % '|'.join([
re.escape(tag) for tag in tags if tag
]))
diff --git a/src/pip/_vendor/pygments/formatters/__init__.py b/src/pip/_vendor/pygments/formatters/__init__.py
index 7023aae4a..43c4c89aa 100644
--- a/src/pip/_vendor/pygments/formatters/__init__.py
+++ b/src/pip/_vendor/pygments/formatters/__init__.py
@@ -11,7 +11,7 @@
import re
import sys
import types
-import fnmatch
+from fnmatch import fnmatch
from os.path import basename
from pip._vendor.pygments.formatters._mapping import FORMATTERS
@@ -22,16 +22,6 @@ __all__ = ['get_formatter_by_name', 'get_formatter_for_filename',
'get_all_formatters', 'load_formatter_from_file'] + list(FORMATTERS)
_formatter_cache = {} # classes by name
-_pattern_cache = {}
-
-
-def _fn_matches(fn, glob):
- """Return whether the supplied file name fn matches pattern filename."""
- if glob not in _pattern_cache:
- pattern = _pattern_cache[glob] = re.compile(fnmatch.translate(glob))
- return pattern.match(fn)
- return _pattern_cache[glob].match(fn)
-
def _load_formatters(module_name):
"""Load a formatter (and all others in the module too)."""
@@ -122,13 +112,13 @@ def get_formatter_for_filename(fn, **options):
fn = basename(fn)
for modname, name, _, filenames, _ in FORMATTERS.values():
for filename in filenames:
- if _fn_matches(fn, filename):
+ if fnmatch(fn, filename):
if name not in _formatter_cache:
_load_formatters(modname)
return _formatter_cache[name](**options)
for cls in find_plugin_formatters():
for filename in cls.filenames:
- if _fn_matches(fn, filename):
+ if fnmatch(fn, filename):
return cls(**options)
raise ClassNotFound("no formatter found for file name %r" % fn)
diff --git a/src/pip/_vendor/pygments/formatters/_mapping.py b/src/pip/_vendor/pygments/formatters/_mapping.py
index db1a8d17a..6e34f9607 100644
--- a/src/pip/_vendor/pygments/formatters/_mapping.py
+++ b/src/pip/_vendor/pygments/formatters/_mapping.py
@@ -1,16 +1,5 @@
-"""
- pygments.formatters._mapping
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
- Formatter mapping definitions. This file is generated by itself. Every time
- you change something on a builtin formatter definition, run this script from
- the formatters folder to update it.
-
- Do not alter the FORMATTERS dictionary by hand.
-
- :copyright: Copyright 2006-2022 by the Pygments team, see AUTHORS.
- :license: BSD, see LICENSE for details.
-"""
+# Automatically generated by scripts/gen_mapfiles.py.
+# DO NOT EDIT BY HAND; run `make mapfiles` instead.
FORMATTERS = {
'BBCodeFormatter': ('pygments.formatters.bbcode', 'BBCode', ('bbcode', 'bb'), (), 'Format tokens with BBcodes. These formatting codes are used by many bulletin boards, so you can highlight your sourcecode with pygments before posting it there.'),
@@ -30,55 +19,5 @@ FORMATTERS = {
'Terminal256Formatter': ('pygments.formatters.terminal256', 'Terminal256', ('terminal256', 'console256', '256'), (), 'Format tokens with ANSI color sequences, for output in a 256-color terminal or console. Like in `TerminalFormatter` color sequences are terminated at newlines, so that paging the output works correctly.'),
'TerminalFormatter': ('pygments.formatters.terminal', 'Terminal', ('terminal', 'console'), (), 'Format tokens with ANSI color sequences, for output in a text console. Color sequences are terminated at newlines, so that paging the output works correctly.'),
'TerminalTrueColorFormatter': ('pygments.formatters.terminal256', 'TerminalTrueColor', ('terminal16m', 'console16m', '16m'), (), 'Format tokens with ANSI color sequences, for output in a true-color terminal or console. Like in `TerminalFormatter` color sequences are terminated at newlines, so that paging the output works correctly.'),
- 'TestcaseFormatter': ('pygments.formatters.other', 'Testcase', ('testcase',), (), 'Format tokens as appropriate for a new testcase.')
+ 'TestcaseFormatter': ('pygments.formatters.other', 'Testcase', ('testcase',), (), 'Format tokens as appropriate for a new testcase.'),
}
-
-if __name__ == '__main__': # pragma: no cover
- import sys
- import os
-
- # lookup formatters
- found_formatters = []
- imports = []
- sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', '..'))
- from pip._vendor.pygments.util import docstring_headline
-
- for root, dirs, files in os.walk('.'):
- for filename in files:
- if filename.endswith('.py') and not filename.startswith('_'):
- module_name = 'pygments.formatters%s.%s' % (
- root[1:].replace('/', '.'), filename[:-3])
- print(module_name)
- module = __import__(module_name, None, None, [''])
- for formatter_name in module.__all__:
- formatter = getattr(module, formatter_name)
- found_formatters.append(
- '%r: %r' % (formatter_name,
- (module_name,
- formatter.name,
- tuple(formatter.aliases),
- tuple(formatter.filenames),
- docstring_headline(formatter))))
- # sort them to make the diff minimal
- found_formatters.sort()
-
- # extract useful sourcecode from this file
- with open(__file__) as fp:
- content = fp.read()
- # replace crnl to nl for Windows.
- #
- # Note that, originally, contributors should keep nl of master
- # repository, for example by using some kind of automatic
- # management EOL, like `EolExtension
- # <https://www.mercurial-scm.org/wiki/EolExtension>`.
- content = content.replace("\r\n", "\n")
- header = content[:content.find('FORMATTERS = {')]
- footer = content[content.find("if __name__ == '__main__':"):]
-
- # write new file
- with open(__file__, 'w') as fp:
- fp.write(header)
- fp.write('FORMATTERS = {\n %s\n}\n\n' % ',\n '.join(found_formatters))
- fp.write(footer)
-
- print ('=== %d formatters processed.' % len(found_formatters))
diff --git a/src/pip/_vendor/pygments/formatters/img.py b/src/pip/_vendor/pygments/formatters/img.py
index 2cc0b2b5b..0f36a32ba 100644
--- a/src/pip/_vendor/pygments/formatters/img.py
+++ b/src/pip/_vendor/pygments/formatters/img.py
@@ -206,13 +206,17 @@ class FontManager:
"""
Get the character size.
"""
- return self.fonts['NORMAL'].getsize('M')
+ return self.get_text_size('M')
def get_text_size(self, text):
"""
- Get the text size(width, height).
+ Get the text size (width, height).
"""
- return self.fonts['NORMAL'].getsize(text)
+ font = self.fonts['NORMAL']
+ if hasattr(font, 'getbbox'): # Pillow >= 9.2.0
+ return font.getbbox(text)[2:4]
+ else:
+ return font.getsize(text)
def get_font(self, bold, oblique):
"""
@@ -520,7 +524,7 @@ class ImageFormatter(Formatter):
text_fg = self._get_text_color(style),
text_bg = self._get_text_bg_color(style),
)
- temp_width, temp_hight = self.fonts.get_text_size(temp)
+ temp_width, _ = self.fonts.get_text_size(temp)
linelength += temp_width
maxlinelength = max(maxlinelength, linelength)
charno += len(temp)
diff --git a/src/pip/_vendor/pygments/lexers/__init__.py b/src/pip/_vendor/pygments/lexers/__init__.py
index 3f404e4f7..ed69f24ed 100644
--- a/src/pip/_vendor/pygments/lexers/__init__.py
+++ b/src/pip/_vendor/pygments/lexers/__init__.py
@@ -11,7 +11,7 @@
import re
import sys
import types
-import fnmatch
+from fnmatch import fnmatch
from os.path import basename
from pip._vendor.pygments.lexers._mapping import LEXERS
@@ -28,16 +28,6 @@ __all__ = ['get_lexer_by_name', 'get_lexer_for_filename', 'find_lexer_class',
'guess_lexer', 'load_lexer_from_file'] + list(LEXERS) + list(COMPAT)
_lexer_cache = {}
-_pattern_cache = {}
-
-
-def _fn_matches(fn, glob):
- """Return whether the supplied file name fn matches pattern filename."""
- if glob not in _pattern_cache:
- pattern = _pattern_cache[glob] = re.compile(fnmatch.translate(glob))
- return pattern.match(fn)
- return _pattern_cache[glob].match(fn)
-
def _load_lexers(module_name):
"""Load a lexer (and all others in the module too)."""
@@ -169,13 +159,13 @@ def find_lexer_class_for_filename(_fn, code=None):
fn = basename(_fn)
for modname, name, _, filenames, _ in LEXERS.values():
for filename in filenames:
- if _fn_matches(fn, filename):
+ if fnmatch(fn, filename):
if name not in _lexer_cache:
_load_lexers(modname)
matches.append((_lexer_cache[name], filename))
for cls in find_plugin_lexers():
for filename in cls.filenames:
- if _fn_matches(fn, filename):
+ if fnmatch(fn, filename):
matches.append((cls, filename))
if isinstance(code, bytes):
@@ -262,11 +252,11 @@ def guess_lexer_for_filename(_fn, _text, **options):
matching_lexers = set()
for lexer in _iter_lexerclasses():
for filename in lexer.filenames:
- if _fn_matches(fn, filename):
+ if fnmatch(fn, filename):
matching_lexers.add(lexer)
primary[lexer] = True
for filename in lexer.alias_filenames:
- if _fn_matches(fn, filename):
+ if fnmatch(fn, filename):
matching_lexers.add(lexer)
primary[lexer] = False
if not matching_lexers:
diff --git a/src/pip/_vendor/pygments/lexers/_mapping.py b/src/pip/_vendor/pygments/lexers/_mapping.py
index 44dbfe677..40dcaa3c7 100644
--- a/src/pip/_vendor/pygments/lexers/_mapping.py
+++ b/src/pip/_vendor/pygments/lexers/_mapping.py
@@ -1,16 +1,5 @@
-"""
- pygments.lexers._mapping
- ~~~~~~~~~~~~~~~~~~~~~~~~
-
- Lexer mapping definitions. This file is generated by itself. Every time
- you change something on a builtin lexer definition, run this script from
- the lexers folder to update it.
-
- Do not alter the LEXERS dictionary by hand.
-
- :copyright: Copyright 2006-2014, 2016 by the Pygments team, see AUTHORS.
- :license: BSD, see LICENSE for details.
-"""
+# Automatically generated by scripts/gen_mapfiles.py.
+# DO NOT EDIT BY HAND; run `make mapfiles` instead.
LEXERS = {
'ABAPLexer': ('pip._vendor.pygments.lexers.business', 'ABAP', ('abap',), ('*.abap', '*.ABAP'), ('text/x-abap',)),
@@ -103,6 +92,7 @@ LEXERS = {
'ColdfusionCFCLexer': ('pip._vendor.pygments.lexers.templates', 'Coldfusion CFC', ('cfc',), ('*.cfc',), ()),
'ColdfusionHtmlLexer': ('pip._vendor.pygments.lexers.templates', 'Coldfusion HTML', ('cfm',), ('*.cfm', '*.cfml'), ('application/x-coldfusion',)),
'ColdfusionLexer': ('pip._vendor.pygments.lexers.templates', 'cfstatement', ('cfs',), (), ()),
+ 'Comal80Lexer': ('pip._vendor.pygments.lexers.comal', 'COMAL-80', ('comal', 'comal80'), ('*.cml', '*.comal'), ()),
'CommonLispLexer': ('pip._vendor.pygments.lexers.lisp', 'Common Lisp', ('common-lisp', 'cl', 'lisp'), ('*.cl', '*.lisp'), ('text/x-common-lisp',)),
'ComponentPascalLexer': ('pip._vendor.pygments.lexers.oberon', 'Component Pascal', ('componentpascal', 'cp'), ('*.cp', '*.cps'), ('text/x-component-pascal',)),
'CoqLexer': ('pip._vendor.pygments.lexers.theorem', 'Coq', ('coq',), ('*.v',), ('text/x-coq',)),
@@ -229,6 +219,7 @@ LEXERS = {
'IrcLogsLexer': ('pip._vendor.pygments.lexers.textfmts', 'IRC logs', ('irc',), ('*.weechatlog',), ('text/x-irclog',)),
'IsabelleLexer': ('pip._vendor.pygments.lexers.theorem', 'Isabelle', ('isabelle',), ('*.thy',), ('text/x-isabelle',)),
'JLexer': ('pip._vendor.pygments.lexers.j', 'J', ('j',), ('*.ijs',), ('text/x-j',)),
+ 'JMESPathLexer': ('pip._vendor.pygments.lexers.jmespath', 'JMESPath', ('jmespath', 'jp'), ('*.jp',), ()),
'JSLTLexer': ('pip._vendor.pygments.lexers.jslt', 'JSLT', ('jslt',), ('*.jslt',), ('text/x-jslt',)),
'JagsLexer': ('pip._vendor.pygments.lexers.modeling', 'JAGS', ('jags',), ('*.jag', '*.bug'), ()),
'JasminLexer': ('pip._vendor.pygments.lexers.jvm', 'Jasmin', ('jasmin', 'jasminxt'), ('*.j',), ()),
@@ -462,6 +453,7 @@ LEXERS = {
'SourcesListLexer': ('pip._vendor.pygments.lexers.installers', 'Debian Sourcelist', ('debsources', 'sourceslist', 'sources.list'), ('sources.list',), ()),
'SparqlLexer': ('pip._vendor.pygments.lexers.rdf', 'SPARQL', ('sparql',), ('*.rq', '*.sparql'), ('application/sparql-query',)),
'SpiceLexer': ('pip._vendor.pygments.lexers.spice', 'Spice', ('spice', 'spicelang'), ('*.spice',), ('text/x-spice',)),
+ 'SqlJinjaLexer': ('pip._vendor.pygments.lexers.templates', 'SQL+Jinja', ('sql+jinja',), ('*.sql', '*.sql.j2', '*.sql.jinja2'), ()),
'SqlLexer': ('pip._vendor.pygments.lexers.sql', 'SQL', ('sql',), ('*.sql',), ('text/x-sql',)),
'SqliteConsoleLexer': ('pip._vendor.pygments.lexers.sql', 'sqlite3con', ('sqlite3',), ('*.sqlite3-console',), ('text/x-sqlite3-console',)),
'SquidConfLexer': ('pip._vendor.pygments.lexers.configs', 'SquidConf', ('squidconf', 'squid.conf', 'squid'), ('squid.conf',), ('text/x-squidconf',)),
@@ -516,7 +508,7 @@ LEXERS = {
'VGLLexer': ('pip._vendor.pygments.lexers.dsls', 'VGL', ('vgl',), ('*.rpf',), ()),
'ValaLexer': ('pip._vendor.pygments.lexers.c_like', 'Vala', ('vala', 'vapi'), ('*.vala', '*.vapi'), ('text/x-vala',)),
'VbNetAspxLexer': ('pip._vendor.pygments.lexers.dotnet', 'aspx-vb', ('aspx-vb',), ('*.aspx', '*.asax', '*.ascx', '*.ashx', '*.asmx', '*.axd'), ()),
- 'VbNetLexer': ('pip._vendor.pygments.lexers.dotnet', 'VB.net', ('vb.net', 'vbnet'), ('*.vb', '*.bas'), ('text/x-vbnet', 'text/x-vba')),
+ 'VbNetLexer': ('pip._vendor.pygments.lexers.dotnet', 'VB.net', ('vb.net', 'vbnet', 'lobas', 'oobas', 'sobas'), ('*.vb', '*.bas'), ('text/x-vbnet', 'text/x-vba')),
'VelocityHtmlLexer': ('pip._vendor.pygments.lexers.templates', 'HTML+Velocity', ('html+velocity',), (), ('text/html+velocity',)),
'VelocityLexer': ('pip._vendor.pygments.lexers.templates', 'Velocity', ('velocity',), ('*.vm', '*.fhtml'), ()),
'VelocityXmlLexer': ('pip._vendor.pygments.lexers.templates', 'XML+Velocity', ('xml+velocity',), (), ('application/xml+velocity',)),
@@ -547,50 +539,3 @@ LEXERS = {
'ZigLexer': ('pip._vendor.pygments.lexers.zig', 'Zig', ('zig',), ('*.zig',), ('text/zig',)),
'apdlexer': ('pip._vendor.pygments.lexers.apdlexer', 'ANSYS parametric design language', ('ansys', 'apdl'), ('*.ans',), ()),
}
-
-if __name__ == '__main__': # pragma: no cover
- import sys
- import os
-
- # lookup lexers
- found_lexers = []
- sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', '..'))
- for root, dirs, files in os.walk('.'):
- for filename in files:
- if filename.endswith('.py') and not filename.startswith('_'):
- module_name = 'pygments.lexers%s.%s' % (
- root[1:].replace('/', '.'), filename[:-3])
- print(module_name)
- module = __import__(module_name, None, None, [''])
- for lexer_name in module.__all__:
- lexer = getattr(module, lexer_name)
- found_lexers.append(
- '%r: %r' % (lexer_name,
- (module_name,
- lexer.name,
- tuple(lexer.aliases),
- tuple(lexer.filenames),
- tuple(lexer.mimetypes))))
- # sort them to make the diff minimal
- found_lexers.sort()
-
- # extract useful sourcecode from this file
- with open(__file__) as fp:
- content = fp.read()
- # replace crnl to nl for Windows.
- #
- # Note that, originally, contributors should keep nl of master
- # repository, for example by using some kind of automatic
- # management EOL, like `EolExtension
- # <https://www.mercurial-scm.org/wiki/EolExtension>`.
- content = content.replace("\r\n", "\n")
- header = content[:content.find('LEXERS = {')]
- footer = content[content.find("if __name__ == '__main__':"):]
-
- # write new file
- with open(__file__, 'w') as fp:
- fp.write(header)
- fp.write('LEXERS = {\n %s,\n}\n\n' % ',\n '.join(found_lexers))
- fp.write(footer)
-
- print ('=== %d lexers processed.' % len(found_lexers))
diff --git a/src/pip/_vendor/pygments/lexers/python.py b/src/pip/_vendor/pygments/lexers/python.py
index 6bc7a78b6..c24e3c86e 100644
--- a/src/pip/_vendor/pygments/lexers/python.py
+++ b/src/pip/_vendor/pygments/lexers/python.py
@@ -142,7 +142,7 @@ class PythonLexer(RegexLexer):
combined('fstringescape', 'dqf')),
("([fF])(')", bygroups(String.Affix, String.Single),
combined('fstringescape', 'sqf')),
- # raw strings
+ # raw bytes and strings
('(?i)(rb|br|r)(""")',
bygroups(String.Affix, String.Double), 'tdqs'),
("(?i)(rb|br|r)(''')",
@@ -152,14 +152,24 @@ class PythonLexer(RegexLexer):
("(?i)(rb|br|r)(')",
bygroups(String.Affix, String.Single), 'sqs'),
# non-raw strings
- ('([uUbB]?)(""")', bygroups(String.Affix, String.Double),
+ ('([uU]?)(""")', bygroups(String.Affix, String.Double),
combined('stringescape', 'tdqs')),
- ("([uUbB]?)(''')", bygroups(String.Affix, String.Single),
+ ("([uU]?)(''')", bygroups(String.Affix, String.Single),
combined('stringescape', 'tsqs')),
- ('([uUbB]?)(")', bygroups(String.Affix, String.Double),
+ ('([uU]?)(")', bygroups(String.Affix, String.Double),
combined('stringescape', 'dqs')),
- ("([uUbB]?)(')", bygroups(String.Affix, String.Single),
+ ("([uU]?)(')", bygroups(String.Affix, String.Single),
combined('stringescape', 'sqs')),
+ # non-raw bytes
+ ('([bB])(""")', bygroups(String.Affix, String.Double),
+ combined('bytesescape', 'tdqs')),
+ ("([bB])(''')", bygroups(String.Affix, String.Single),
+ combined('bytesescape', 'tsqs')),
+ ('([bB])(")', bygroups(String.Affix, String.Double),
+ combined('bytesescape', 'dqs')),
+ ("([bB])(')", bygroups(String.Affix, String.Single),
+ combined('bytesescape', 'sqs')),
+
(r'[^\S\n]+', Text),
include('numbers'),
(r'!=|==|<<|>>|:=|[-~+/*%=<>&^|.]', Operator),
@@ -343,9 +353,12 @@ class PythonLexer(RegexLexer):
include('rfstringescape'),
include('stringescape'),
],
+ 'bytesescape': [
+ (r'\\([\\abfnrtv"\']|\n|x[a-fA-F0-9]{2}|[0-7]{1,3})', String.Escape)
+ ],
'stringescape': [
- (r'\\([\\abfnrtv"\']|\n|N\{.*?\}|u[a-fA-F0-9]{4}|'
- r'U[a-fA-F0-9]{8}|x[a-fA-F0-9]{2}|[0-7]{1,3})', String.Escape)
+ (r'\\(N\{.*?\}|u[a-fA-F0-9]{4}|U[a-fA-F0-9]{8})', String.Escape),
+ include('bytesescape')
],
'fstrings-single': fstring_rules(String.Single),
'fstrings-double': fstring_rules(String.Double),
diff --git a/src/pip/_vendor/pygments/plugin.py b/src/pip/_vendor/pygments/plugin.py
index a0431bf72..3590bee8d 100644
--- a/src/pip/_vendor/pygments/plugin.py
+++ b/src/pip/_vendor/pygments/plugin.py
@@ -2,9 +2,12 @@
pygments.plugin
~~~~~~~~~~~~~~~
- Pygments setuptools plugin interface. The methods defined
- here also work if setuptools isn't installed but they just
- return nothing.
+ Pygments plugin interface. By default, this tries to use
+ ``importlib.metadata``, which is in the Python standard
+ library since Python 3.8, or its ``importlib_metadata``
+ backport for earlier versions of Python. It falls back on
+ ``pkg_resources`` if not found. Finally, if ``pkg_resources``
+ is not found either, no plugins are loaded at all.
lexer plugins::
@@ -34,6 +37,7 @@
:copyright: Copyright 2006-2022 by the Pygments team, see AUTHORS.
:license: BSD, see LICENSE for details.
"""
+
LEXER_ENTRY_POINT = 'pygments.lexers'
FORMATTER_ENTRY_POINT = 'pygments.formatters'
STYLE_ENTRY_POINT = 'pygments.styles'
@@ -42,11 +46,26 @@ FILTER_ENTRY_POINT = 'pygments.filters'
def iter_entry_points(group_name):
try:
- from pip._vendor import pkg_resources
- except (ImportError, OSError):
- return []
-
- return pkg_resources.iter_entry_points(group_name)
+ from importlib.metadata import entry_points
+ except ImportError:
+ try:
+ from importlib_metadata import entry_points
+ except ImportError:
+ try:
+ from pip._vendor.pkg_resources import iter_entry_points
+ except (ImportError, OSError):
+ return []
+ else:
+ return iter_entry_points(group_name)
+ groups = entry_points()
+ if hasattr(groups, 'select'):
+ # New interface in Python 3.10 and newer versions of the
+ # importlib_metadata backport.
+ return groups.select(group=group_name)
+ else:
+ # Older interface, deprecated in Python 3.10 and recent
+ # importlib_metadata, but we need it in Python 3.8 and 3.9.
+ return groups.get(group_name, [])
def find_plugin_lexers():
diff --git a/src/pip/_vendor/pygments/styles/__init__.py b/src/pip/_vendor/pygments/styles/__init__.py
index 951ca1794..44cc0efb0 100644
--- a/src/pip/_vendor/pygments/styles/__init__.py
+++ b/src/pip/_vendor/pygments/styles/__init__.py
@@ -48,6 +48,7 @@ STYLE_MAP = {
'solarized-dark': 'solarized::SolarizedDarkStyle',
'solarized-light': 'solarized::SolarizedLightStyle',
'sas': 'sas::SasStyle',
+ 'staroffice' : 'staroffice::StarofficeStyle',
'stata': 'stata_light::StataLightStyle',
'stata-light': 'stata_light::StataLightStyle',
'stata-dark': 'stata_dark::StataDarkStyle',
@@ -58,6 +59,9 @@ STYLE_MAP = {
'dracula': 'dracula::DraculaStyle',
'one-dark': 'onedark::OneDarkStyle',
'lilypond' : 'lilypond::LilyPondStyle',
+ 'nord': 'nord::NordStyle',
+ 'nord-darker': 'nord::NordDarkerStyle',
+ 'github-dark': 'gh_dark::GhDarkStyle'
}
diff --git a/src/pip/_vendor/pygments/token.py b/src/pip/_vendor/pygments/token.py
index 8aee88a83..e3e565ad5 100644
--- a/src/pip/_vendor/pygments/token.py
+++ b/src/pip/_vendor/pygments/token.py
@@ -189,6 +189,7 @@ STANDARD_TYPES = {
Operator.Word: 'ow',
Punctuation: 'p',
+ Punctuation.Marker: 'pm',
Comment: 'c',
Comment.Hashbang: 'ch',
diff --git a/src/pip/_vendor/vendor.txt b/src/pip/_vendor/vendor.txt
index 733e665d2..d192f6431 100644
--- a/src/pip/_vendor/vendor.txt
+++ b/src/pip/_vendor/vendor.txt
@@ -13,7 +13,7 @@ requests==2.28.1
idna==3.4
urllib3==1.26.12
rich==12.5.1
- pygments==2.12.0
+ pygments==2.13.0
typing_extensions==4.3.0
resolvelib==0.8.1
setuptools==44.0.0