Mingke977 commited on
Commit
15b8504
·
verified ·
1 Parent(s): 418881f

Add files using upload-large-folder tool

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. venv/lib/python3.10/site-packages/pip-22.0.2.dist-info/INSTALLER +1 -0
  2. venv/lib/python3.10/site-packages/pip-22.0.2.dist-info/LICENSE.txt +20 -0
  3. venv/lib/python3.10/site-packages/pip-22.0.2.dist-info/METADATA +92 -0
  4. venv/lib/python3.10/site-packages/pip-22.0.2.dist-info/RECORD +1037 -0
  5. venv/lib/python3.10/site-packages/pip-22.0.2.dist-info/REQUESTED +0 -0
  6. venv/lib/python3.10/site-packages/pip-22.0.2.dist-info/WHEEL +5 -0
  7. venv/lib/python3.10/site-packages/pip-22.0.2.dist-info/entry_points.txt +5 -0
  8. venv/lib/python3.10/site-packages/pip-22.0.2.dist-info/top_level.txt +1 -0
  9. venv/lib/python3.10/site-packages/pip/_vendor/pygments/__pycache__/token.cpython-310.pyc +0 -0
  10. venv/lib/python3.10/site-packages/pip/_vendor/pygments/__pycache__/unistring.cpython-310.pyc +0 -0
  11. venv/lib/python3.10/site-packages/pip/_vendor/pygments/__pycache__/util.cpython-310.pyc +0 -0
  12. venv/lib/python3.10/site-packages/pip/_vendor/pygments/filters/__init__.py +937 -0
  13. venv/lib/python3.10/site-packages/pip/_vendor/pygments/filters/__pycache__/__init__.cpython-310.pyc +0 -0
  14. venv/lib/python3.10/site-packages/pip/_vendor/pygments/formatters/__init__.py +153 -0
  15. venv/lib/python3.10/site-packages/pip/_vendor/pygments/formatters/__pycache__/__init__.cpython-310.pyc +0 -0
  16. venv/lib/python3.10/site-packages/pip/_vendor/pygments/formatters/__pycache__/_mapping.cpython-310.pyc +0 -0
  17. venv/lib/python3.10/site-packages/pip/_vendor/pygments/formatters/__pycache__/bbcode.cpython-310.pyc +0 -0
  18. venv/lib/python3.10/site-packages/pip/_vendor/pygments/formatters/__pycache__/groff.cpython-310.pyc +0 -0
  19. venv/lib/python3.10/site-packages/pip/_vendor/pygments/formatters/__pycache__/html.cpython-310.pyc +0 -0
  20. venv/lib/python3.10/site-packages/pip/_vendor/pygments/formatters/__pycache__/img.cpython-310.pyc +0 -0
  21. venv/lib/python3.10/site-packages/pip/_vendor/pygments/formatters/__pycache__/irc.cpython-310.pyc +0 -0
  22. venv/lib/python3.10/site-packages/pip/_vendor/pygments/formatters/__pycache__/latex.cpython-310.pyc +0 -0
  23. venv/lib/python3.10/site-packages/pip/_vendor/pygments/formatters/__pycache__/other.cpython-310.pyc +0 -0
  24. venv/lib/python3.10/site-packages/pip/_vendor/pygments/formatters/__pycache__/pangomarkup.cpython-310.pyc +0 -0
  25. venv/lib/python3.10/site-packages/pip/_vendor/pygments/formatters/__pycache__/rtf.cpython-310.pyc +0 -0
  26. venv/lib/python3.10/site-packages/pip/_vendor/pygments/formatters/__pycache__/svg.cpython-310.pyc +0 -0
  27. venv/lib/python3.10/site-packages/pip/_vendor/pygments/formatters/__pycache__/terminal.cpython-310.pyc +0 -0
  28. venv/lib/python3.10/site-packages/pip/_vendor/pygments/formatters/__pycache__/terminal256.cpython-310.pyc +0 -0
  29. venv/lib/python3.10/site-packages/pip/_vendor/pygments/formatters/_mapping.py +84 -0
  30. venv/lib/python3.10/site-packages/pip/_vendor/pygments/formatters/bbcode.py +108 -0
  31. venv/lib/python3.10/site-packages/pip/_vendor/pygments/formatters/groff.py +168 -0
  32. venv/lib/python3.10/site-packages/pip/_vendor/pygments/formatters/html.py +983 -0
  33. venv/lib/python3.10/site-packages/pip/_vendor/pygments/formatters/img.py +641 -0
  34. venv/lib/python3.10/site-packages/pip/_vendor/pygments/formatters/irc.py +179 -0
  35. venv/lib/python3.10/site-packages/pip/_vendor/pygments/formatters/latex.py +511 -0
  36. venv/lib/python3.10/site-packages/pip/_vendor/pygments/formatters/other.py +161 -0
  37. venv/lib/python3.10/site-packages/pip/_vendor/pygments/formatters/pangomarkup.py +83 -0
  38. venv/lib/python3.10/site-packages/pip/_vendor/pygments/formatters/rtf.py +146 -0
  39. venv/lib/python3.10/site-packages/pip/_vendor/pygments/formatters/svg.py +188 -0
  40. venv/lib/python3.10/site-packages/pip/_vendor/pygments/formatters/terminal.py +127 -0
  41. venv/lib/python3.10/site-packages/pip/_vendor/pygments/formatters/terminal256.py +338 -0
  42. venv/lib/python3.10/site-packages/pip/_vendor/pygments/lexers/__init__.py +341 -0
  43. venv/lib/python3.10/site-packages/pip/_vendor/pygments/lexers/__pycache__/__init__.cpython-310.pyc +0 -0
  44. venv/lib/python3.10/site-packages/pip/_vendor/pygments/lexers/__pycache__/_mapping.cpython-310.pyc +0 -0
  45. venv/lib/python3.10/site-packages/pip/_vendor/pygments/lexers/__pycache__/python.cpython-310.pyc +0 -0
  46. venv/lib/python3.10/site-packages/pip/_vendor/pygments/lexers/_mapping.py +580 -0
  47. venv/lib/python3.10/site-packages/pip/_vendor/pygments/lexers/python.py +1188 -0
  48. venv/lib/python3.10/site-packages/pip/_vendor/pygments/styles/__init__.py +93 -0
  49. venv/lib/python3.10/site-packages/pip/_vendor/pygments/styles/__pycache__/__init__.cpython-310.pyc +0 -0
  50. venv/lib/python3.10/site-packages/pip/_vendor/pyparsing/__init__.py +328 -0
venv/lib/python3.10/site-packages/pip-22.0.2.dist-info/INSTALLER ADDED
@@ -0,0 +1 @@
 
 
1
+ pip
venv/lib/python3.10/site-packages/pip-22.0.2.dist-info/LICENSE.txt ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Copyright (c) 2008-present The pip developers (see AUTHORS.txt file)
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
venv/lib/python3.10/site-packages/pip-22.0.2.dist-info/METADATA ADDED
@@ -0,0 +1,92 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Metadata-Version: 2.1
2
+ Name: pip
3
+ Version: 22.0.2
4
+ Summary: The PyPA recommended tool for installing Python packages.
5
+ Home-page: https://pip.pypa.io/
6
+ Author: The pip developers
7
+ Author-email: distutils-sig@python.org
8
+ License: MIT
9
+ Project-URL: Documentation, https://pip.pypa.io
10
+ Project-URL: Source, https://github.com/pypa/pip
11
+ Project-URL: Changelog, https://pip.pypa.io/en/stable/news/
12
+ Platform: UNKNOWN
13
+ Classifier: Development Status :: 5 - Production/Stable
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: License :: OSI Approved :: MIT License
16
+ Classifier: Topic :: Software Development :: Build Tools
17
+ Classifier: Programming Language :: Python
18
+ Classifier: Programming Language :: Python :: 3
19
+ Classifier: Programming Language :: Python :: 3 :: Only
20
+ Classifier: Programming Language :: Python :: 3.7
21
+ Classifier: Programming Language :: Python :: 3.8
22
+ Classifier: Programming Language :: Python :: 3.9
23
+ Classifier: Programming Language :: Python :: 3.10
24
+ Classifier: Programming Language :: Python :: Implementation :: CPython
25
+ Classifier: Programming Language :: Python :: Implementation :: PyPy
26
+ Requires-Python: >=3.7
27
+ License-File: LICENSE.txt
28
+
29
+ pip - The Python Package Installer
30
+ ==================================
31
+
32
+ .. image:: https://img.shields.io/pypi/v/pip.svg
33
+ :target: https://pypi.org/project/pip/
34
+
35
+ .. image:: https://readthedocs.org/projects/pip/badge/?version=latest
36
+ :target: https://pip.pypa.io/en/latest
37
+
38
+ pip is the `package installer`_ for Python. You can use pip to install packages from the `Python Package Index`_ and other indexes.
39
+
40
+ Please take a look at our documentation for how to install and use pip:
41
+
42
+ * `Installation`_
43
+ * `Usage`_
44
+
45
+ We release updates regularly, with a new version every 3 months. Find more details in our documentation:
46
+
47
+ * `Release notes`_
48
+ * `Release process`_
49
+
50
+ In pip 20.3, we've `made a big improvement to the heart of pip`_; `learn more`_. We want your input, so `sign up for our user experience research studies`_ to help us do it right.
51
+
52
+ **Note**: pip 21.0, in January 2021, removed Python 2 support, per pip's `Python 2 support policy`_. Please migrate to Python 3.
53
+
54
+ If you find bugs, need help, or want to talk to the developers, please use our mailing lists or chat rooms:
55
+
56
+ * `Issue tracking`_
57
+ * `Discourse channel`_
58
+ * `User IRC`_
59
+
60
+ If you want to get involved head over to GitHub to get the source code, look at our development documentation and feel free to jump on the developer mailing lists and chat rooms:
61
+
62
+ * `GitHub page`_
63
+ * `Development documentation`_
64
+ * `Development mailing list`_
65
+ * `Development IRC`_
66
+
67
+ Code of Conduct
68
+ ---------------
69
+
70
+ Everyone interacting in the pip project's codebases, issue trackers, chat
71
+ rooms, and mailing lists is expected to follow the `PSF Code of Conduct`_.
72
+
73
+ .. _package installer: https://packaging.python.org/guides/tool-recommendations/
74
+ .. _Python Package Index: https://pypi.org
75
+ .. _Installation: https://pip.pypa.io/en/stable/installation/
76
+ .. _Usage: https://pip.pypa.io/en/stable/
77
+ .. _Release notes: https://pip.pypa.io/en/stable/news.html
78
+ .. _Release process: https://pip.pypa.io/en/latest/development/release-process/
79
+ .. _GitHub page: https://github.com/pypa/pip
80
+ .. _Development documentation: https://pip.pypa.io/en/latest/development
81
+ .. _made a big improvement to the heart of pip: https://pyfound.blogspot.com/2020/11/pip-20-3-new-resolver.html
82
+ .. _learn more: https://pip.pypa.io/en/latest/user_guide/#changes-to-the-pip-dependency-resolver-in-20-3-2020
83
+ .. _sign up for our user experience research studies: https://pyfound.blogspot.com/2020/03/new-pip-resolver-to-roll-out-this-year.html
84
+ .. _Python 2 support policy: https://pip.pypa.io/en/latest/development/release-process/#python-2-support
85
+ .. _Issue tracking: https://github.com/pypa/pip/issues
86
+ .. _Discourse channel: https://discuss.python.org/c/packaging
87
+ .. _Development mailing list: https://mail.python.org/mailman3/lists/distutils-sig.python.org/
88
+ .. _User IRC: https://kiwiirc.com/nextclient/#ircs://irc.libera.chat:+6697/pypa
89
+ .. _Development IRC: https://kiwiirc.com/nextclient/#ircs://irc.libera.chat:+6697/pypa-dev
90
+ .. _PSF Code of Conduct: https://github.com/pypa/.github/blob/main/CODE_OF_CONDUCT.md
91
+
92
+
venv/lib/python3.10/site-packages/pip-22.0.2.dist-info/RECORD ADDED
@@ -0,0 +1,1037 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ../../../bin/pip,sha256=YcrAqwCdjR8zKfGuOon-X0xTmfREFsYdXzKddIrssnA,386
2
+ ../../../bin/pip3,sha256=YcrAqwCdjR8zKfGuOon-X0xTmfREFsYdXzKddIrssnA,386
3
+ ../../../bin/pip3.10,sha256=YcrAqwCdjR8zKfGuOon-X0xTmfREFsYdXzKddIrssnA,386
4
+ ../../../bin/pip3.10,sha256=YcrAqwCdjR8zKfGuOon-X0xTmfREFsYdXzKddIrssnA,386
5
+ pip-22.0.2.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
6
+ pip-22.0.2.dist-info/LICENSE.txt,sha256=Y0MApmnUmurmWxLGxIySTFGkzfPR_whtw0VtyLyqIQQ,1093
7
+ pip-22.0.2.dist-info/METADATA,sha256=Yixa0LKkyzjT2N5JQO5qYDgZcmTs6Z6dg4UbwBNyT2A,4166
8
+ pip-22.0.2.dist-info/RECORD,,
9
+ pip-22.0.2.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
+ pip-22.0.2.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
11
+ pip-22.0.2.dist-info/entry_points.txt,sha256=vUvIlB_ga0fFQuWvFEq6uJKftMG_HNuoe4kgXkb5rNY,126
12
+ pip-22.0.2.dist-info/top_level.txt,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
13
+ pip/__init__.py,sha256=PZBF-ESk5Q0DZxQd4HHmTU_wX8y1ynzxBCRdu_fxHSI,357
14
+ pip/__main__.py,sha256=mXwWDftNLMKfwVqKFWGE_uuBZvGSIiUELhLkeysIuZc,1198
15
+ pip/__pycache__/__init__.cpython-310.pyc,,
16
+ pip/__pycache__/__main__.cpython-310.pyc,,
17
+ pip/_internal/__init__.py,sha256=nnFCuxrPMgALrIDxSoy-H6Zj4W4UY60D-uL1aJyq0pc,573
18
+ pip/_internal/__pycache__/__init__.cpython-310.pyc,,
19
+ pip/_internal/__pycache__/build_env.cpython-310.pyc,,
20
+ pip/_internal/__pycache__/cache.cpython-310.pyc,,
21
+ pip/_internal/__pycache__/configuration.cpython-310.pyc,,
22
+ pip/_internal/__pycache__/exceptions.cpython-310.pyc,,
23
+ pip/_internal/__pycache__/main.cpython-310.pyc,,
24
+ pip/_internal/__pycache__/pyproject.cpython-310.pyc,,
25
+ pip/_internal/__pycache__/self_outdated_check.cpython-310.pyc,,
26
+ pip/_internal/__pycache__/wheel_builder.cpython-310.pyc,,
27
+ pip/_internal/build_env.py,sha256=QAsnxJFvj74jS2cZUcxk7zXLvrtAYiRL0EkSPkpSJTo,9739
28
+ pip/_internal/cache.py,sha256=71eaYwrls34HJ6gzbmmYiotiKhPNFTM_tqYJXD5nf3s,9441
29
+ pip/_internal/cli/__init__.py,sha256=FkHBgpxxb-_gd6r1FjnNhfMOzAUYyXoXKJ6abijfcFU,132
30
+ pip/_internal/cli/__pycache__/__init__.cpython-310.pyc,,
31
+ pip/_internal/cli/__pycache__/autocompletion.cpython-310.pyc,,
32
+ pip/_internal/cli/__pycache__/base_command.cpython-310.pyc,,
33
+ pip/_internal/cli/__pycache__/cmdoptions.cpython-310.pyc,,
34
+ pip/_internal/cli/__pycache__/command_context.cpython-310.pyc,,
35
+ pip/_internal/cli/__pycache__/main.cpython-310.pyc,,
36
+ pip/_internal/cli/__pycache__/main_parser.cpython-310.pyc,,
37
+ pip/_internal/cli/__pycache__/parser.cpython-310.pyc,,
38
+ pip/_internal/cli/__pycache__/progress_bars.cpython-310.pyc,,
39
+ pip/_internal/cli/__pycache__/req_command.cpython-310.pyc,,
40
+ pip/_internal/cli/__pycache__/spinners.cpython-310.pyc,,
41
+ pip/_internal/cli/__pycache__/status_codes.cpython-310.pyc,,
42
+ pip/_internal/cli/autocompletion.py,sha256=wY2JPZY2Eji1vhR7bVo-yCBPJ9LCy6P80iOAhZD1Vi8,6676
43
+ pip/_internal/cli/base_command.py,sha256=6IVFmOjObv0ILip28QcgP8glhXHiGRvU_9kO35Hr7Z0,8037
44
+ pip/_internal/cli/cmdoptions.py,sha256=GT2G2YKBj-851qGseugn2Veq7fJe3FA30gWdcziPQvo,28525
45
+ pip/_internal/cli/command_context.py,sha256=a1pBBvvGLDiZ1Kw64_4tT6HmRTwYDoYy8JFgG5Czn7s,760
46
+ pip/_internal/cli/main.py,sha256=ioJ8IVlb2K1qLOxR-tXkee9lURhYV89CDM71MKag7YY,2472
47
+ pip/_internal/cli/main_parser.py,sha256=Q9TnytfuC5Z2JSjBFWVGtEdYLFy7rukNIb04movHdAo,2614
48
+ pip/_internal/cli/parser.py,sha256=CDXTuFr2UD8ozOlZYf1KDziQdo9-X_IaYOiUcyJQwrA,10788
49
+ pip/_internal/cli/progress_bars.py,sha256=_52w11WoZrvDSR3oItLWvLrEZFUKAfLf4Y6I6WtOnIU,10339
50
+ pip/_internal/cli/req_command.py,sha256=VwqonOy18QwZsRsVjHhp-6w15fG9x3Ltwoa8yJqQno8,18669
51
+ pip/_internal/cli/spinners.py,sha256=TFhjxtOnLeNJ5YmRvQm4eKPgPbJNkZiqO8jOXuxRaYU,5076
52
+ pip/_internal/cli/status_codes.py,sha256=sEFHUaUJbqv8iArL3HAtcztWZmGOFX01hTesSytDEh0,116
53
+ pip/_internal/commands/__init__.py,sha256=Vc1HjsLEtyCh7506OozPHPKXe2Hk-z9cFkFF3BMj1lM,3736
54
+ pip/_internal/commands/__pycache__/__init__.cpython-310.pyc,,
55
+ pip/_internal/commands/__pycache__/cache.cpython-310.pyc,,
56
+ pip/_internal/commands/__pycache__/check.cpython-310.pyc,,
57
+ pip/_internal/commands/__pycache__/completion.cpython-310.pyc,,
58
+ pip/_internal/commands/__pycache__/configuration.cpython-310.pyc,,
59
+ pip/_internal/commands/__pycache__/debug.cpython-310.pyc,,
60
+ pip/_internal/commands/__pycache__/download.cpython-310.pyc,,
61
+ pip/_internal/commands/__pycache__/freeze.cpython-310.pyc,,
62
+ pip/_internal/commands/__pycache__/hash.cpython-310.pyc,,
63
+ pip/_internal/commands/__pycache__/help.cpython-310.pyc,,
64
+ pip/_internal/commands/__pycache__/index.cpython-310.pyc,,
65
+ pip/_internal/commands/__pycache__/install.cpython-310.pyc,,
66
+ pip/_internal/commands/__pycache__/list.cpython-310.pyc,,
67
+ pip/_internal/commands/__pycache__/search.cpython-310.pyc,,
68
+ pip/_internal/commands/__pycache__/show.cpython-310.pyc,,
69
+ pip/_internal/commands/__pycache__/uninstall.cpython-310.pyc,,
70
+ pip/_internal/commands/__pycache__/wheel.cpython-310.pyc,,
71
+ pip/_internal/commands/cache.py,sha256=p9gvc6W_xgxE2zO0o8NXqO1gGJEinEK42qEC-a7Cnuk,7524
72
+ pip/_internal/commands/check.py,sha256=0gjXR7j36xJT5cs2heYU_dfOfpnFfzX8OoPNNoKhqdM,1685
73
+ pip/_internal/commands/completion.py,sha256=kTG_I1VR3N5kGC4Ma9pQTSoY9Q1URCrNyseHSQ-rCL4,2958
74
+ pip/_internal/commands/configuration.py,sha256=arE8vLstjBg-Ar1krXF-bBmT1qBtnL7Fpk-NVh38a0U,8944
75
+ pip/_internal/commands/debug.py,sha256=krET-y45CnQzXwKR1qA3M_tJE4LE2vnQtm3yfGyDSnE,6629
76
+ pip/_internal/commands/download.py,sha256=gVIAEOcpWolhRj9hl89Qzn52G2b_pcZ8naXhxaXobdo,4942
77
+ pip/_internal/commands/freeze.py,sha256=PaJJB9mT_3vHeZ3mbFL_m1fzTYL-_Or3kDtXwTdZZ-A,2968
78
+ pip/_internal/commands/hash.py,sha256=EVVOuvGtoPEdFi8SNnmdqlCQrhCxV-kJsdwtdcCnXGQ,1703
79
+ pip/_internal/commands/help.py,sha256=gcc6QDkcgHMOuAn5UxaZwAStsRBrnGSn_yxjS57JIoM,1132
80
+ pip/_internal/commands/index.py,sha256=8pYkICUJlccjm3E83b7UuZ5DtOfLh1N7ZHXAgkajjHo,4849
81
+ pip/_internal/commands/install.py,sha256=YVygBF6vfrNi0jmdNBCM6bcoWb7vaALEGG1--8Mmf88,27893
82
+ pip/_internal/commands/list.py,sha256=aKt1PP7enTiNLD_1qDXXaIKQ2QvLmUDfoQU6SYxJ8Ek,12318
83
+ pip/_internal/commands/search.py,sha256=sbBZiARRc050QquOKcCvOr2K3XLsoYebLKZGRi__iUI,5697
84
+ pip/_internal/commands/show.py,sha256=2VicM3jF0YWgn4O1jG_QF5oxOT0ln57VDu1NE6hqWcM,5859
85
+ pip/_internal/commands/uninstall.py,sha256=DNTYAGJNljMO_YYBxrpcwj0FEl7lo_P55_98O6g2TNk,3526
86
+ pip/_internal/commands/wheel.py,sha256=7HAjLclZxIzBrX6JmhmGBVxH5xrjaBYCtSdpQi1pWCE,6206
87
+ pip/_internal/configuration.py,sha256=qmCX3uuVM73PQeAuWQHic22bhops8s31B8k02nFAoiQ,13171
88
+ pip/_internal/distributions/__init__.py,sha256=Hq6kt6gXBgjNit5hTTWLAzeCNOKoB-N0pGYSqehrli8,858
89
+ pip/_internal/distributions/__pycache__/__init__.cpython-310.pyc,,
90
+ pip/_internal/distributions/__pycache__/base.cpython-310.pyc,,
91
+ pip/_internal/distributions/__pycache__/installed.cpython-310.pyc,,
92
+ pip/_internal/distributions/__pycache__/sdist.cpython-310.pyc,,
93
+ pip/_internal/distributions/__pycache__/wheel.cpython-310.pyc,,
94
+ pip/_internal/distributions/base.py,sha256=3FUYD8Gb4YuSu3pggC_FRctZBDbpm5ZK89tPksIUjoE,1172
95
+ pip/_internal/distributions/installed.py,sha256=HzfNRu3smoOm54m8H2iK6LHzBx6_DEnka4OPEsizbXg,680
96
+ pip/_internal/distributions/sdist.py,sha256=0nJvU1RhZtbwaeYtLbzSwYrbGRcY6IgNsWdEhAHROK8,5499
97
+ pip/_internal/distributions/wheel.py,sha256=-NgzdIs-w_hcer_U81yzgpVTljJRg5m79xufqvbjv0s,1115
98
+ pip/_internal/exceptions.py,sha256=U-dV1ixkSz6NAU6Aw9dosKi2EzZ5D3BA7ilYZuTLKeU,20912
99
+ pip/_internal/index/__init__.py,sha256=vpt-JeTZefh8a-FC22ZeBSXFVbuBcXSGiILhQZJaNpQ,30
100
+ pip/_internal/index/__pycache__/__init__.cpython-310.pyc,,
101
+ pip/_internal/index/__pycache__/collector.cpython-310.pyc,,
102
+ pip/_internal/index/__pycache__/package_finder.cpython-310.pyc,,
103
+ pip/_internal/index/__pycache__/sources.cpython-310.pyc,,
104
+ pip/_internal/index/collector.py,sha256=8kXlmlnZ-qAknyxd0duCn5mxFHX-zr468ykutk8WOwo,21392
105
+ pip/_internal/index/package_finder.py,sha256=9UVg-7582nYNEWa0cIIl8otzPm4mlfyrQVuozAcssLo,36783
106
+ pip/_internal/index/sources.py,sha256=SVyPitv08-Qalh2_Bk5diAJ9GAA_d-a93koouQodAG0,6557
107
+ pip/_internal/locations/__init__.py,sha256=ergvPwlfNTmQYFmaRYbj--ZwTN5izgTL9KE5d0FB7-8,17362
108
+ pip/_internal/locations/__pycache__/__init__.cpython-310.pyc,,
109
+ pip/_internal/locations/__pycache__/_distutils.cpython-310.pyc,,
110
+ pip/_internal/locations/__pycache__/_sysconfig.cpython-310.pyc,,
111
+ pip/_internal/locations/__pycache__/base.cpython-310.pyc,,
112
+ pip/_internal/locations/_distutils.py,sha256=Sk7tw8ZP1DWMYJ8MibABsa8IME2Ejv1PKeGlYQCBTZc,5871
113
+ pip/_internal/locations/_sysconfig.py,sha256=LQNKTJKyjVqxXaPntlBwdUqTG1xwYf6GVCKMbyRJx5M,7918
114
+ pip/_internal/locations/base.py,sha256=x5D1ONktmPJd8nnUTh-ELsAJ7fiXA-k-0a_vhfi2_Us,1579
115
+ pip/_internal/main.py,sha256=r-UnUe8HLo5XFJz8inTcOOTiu_sxNhgHb6VwlGUllOI,340
116
+ pip/_internal/metadata/__init__.py,sha256=iGoDbe_iTXQTIAEVy9f7dm-VQfZANO8kkwFr1CpqxqI,2036
117
+ pip/_internal/metadata/__pycache__/__init__.cpython-310.pyc,,
118
+ pip/_internal/metadata/__pycache__/base.cpython-310.pyc,,
119
+ pip/_internal/metadata/__pycache__/pkg_resources.cpython-310.pyc,,
120
+ pip/_internal/metadata/base.py,sha256=SCRPtShrtPy0lfFxuaFTgJJHsRXToGFToQUAZoBBbeA,19429
121
+ pip/_internal/metadata/pkg_resources.py,sha256=wAnEtrcgH9YtV996MfoBjR2hGLHvi3uxk0vUOHbqBak,9456
122
+ pip/_internal/models/__init__.py,sha256=3DHUd_qxpPozfzouoqa9g9ts1Czr5qaHfFxbnxriepM,63
123
+ pip/_internal/models/__pycache__/__init__.cpython-310.pyc,,
124
+ pip/_internal/models/__pycache__/candidate.cpython-310.pyc,,
125
+ pip/_internal/models/__pycache__/direct_url.cpython-310.pyc,,
126
+ pip/_internal/models/__pycache__/format_control.cpython-310.pyc,,
127
+ pip/_internal/models/__pycache__/index.cpython-310.pyc,,
128
+ pip/_internal/models/__pycache__/link.cpython-310.pyc,,
129
+ pip/_internal/models/__pycache__/scheme.cpython-310.pyc,,
130
+ pip/_internal/models/__pycache__/search_scope.cpython-310.pyc,,
131
+ pip/_internal/models/__pycache__/selection_prefs.cpython-310.pyc,,
132
+ pip/_internal/models/__pycache__/target_python.cpython-310.pyc,,
133
+ pip/_internal/models/__pycache__/wheel.cpython-310.pyc,,
134
+ pip/_internal/models/candidate.py,sha256=6pcABsaR7CfIHlbJbr2_kMkVJFL_yrYjTx6SVWUnCPQ,990
135
+ pip/_internal/models/direct_url.py,sha256=7XtGQSLLDQb5ZywI2EMnnLcddtf5CJLx44lMtTHPxFw,6350
136
+ pip/_internal/models/format_control.py,sha256=DJpMYjxeYKKQdwNcML2_F0vtAh-qnKTYe-CpTxQe-4g,2520
137
+ pip/_internal/models/index.py,sha256=tYnL8oxGi4aSNWur0mG8DAP7rC6yuha_MwJO8xw0crI,1030
138
+ pip/_internal/models/link.py,sha256=hoT_qsOBAgLBm9GKqpBrNF_mrEXeGXQE-aH_RX2cGgg,9817
139
+ pip/_internal/models/scheme.py,sha256=3EFQp_ICu_shH1-TBqhl0QAusKCPDFOlgHFeN4XowWs,738
140
+ pip/_internal/models/search_scope.py,sha256=LwloG0PJAmtI1hFXIypsD95kWE9xfR5hf_a2v1Vw7sk,4520
141
+ pip/_internal/models/selection_prefs.py,sha256=KZdi66gsR-_RUXUr9uejssk3rmTHrQVJWeNA2sV-VSY,1907
142
+ pip/_internal/models/target_python.py,sha256=qKpZox7J8NAaPmDs5C_aniwfPDxzvpkrCKqfwndG87k,3858
143
+ pip/_internal/models/wheel.py,sha256=wlyz23BcZ40nBLX3rXKtrV6tmc8-8RxHyV-hq5zJ74Q,3525
144
+ pip/_internal/network/__init__.py,sha256=jf6Tt5nV_7zkARBrKojIXItgejvoegVJVKUbhAa5Ioc,50
145
+ pip/_internal/network/__pycache__/__init__.cpython-310.pyc,,
146
+ pip/_internal/network/__pycache__/auth.cpython-310.pyc,,
147
+ pip/_internal/network/__pycache__/cache.cpython-310.pyc,,
148
+ pip/_internal/network/__pycache__/download.cpython-310.pyc,,
149
+ pip/_internal/network/__pycache__/lazy_wheel.cpython-310.pyc,,
150
+ pip/_internal/network/__pycache__/session.cpython-310.pyc,,
151
+ pip/_internal/network/__pycache__/utils.cpython-310.pyc,,
152
+ pip/_internal/network/__pycache__/xmlrpc.cpython-310.pyc,,
153
+ pip/_internal/network/auth.py,sha256=a3C7Xaa8kTJjXkdi_wrUjqaySc8Z9Yz7U6QIbXfzMyc,12190
154
+ pip/_internal/network/cache.py,sha256=FJ3uTUo3wgf2KHmeZ3ltN9x3tQoy_0X6qNsRtNXsuL0,2131
155
+ pip/_internal/network/download.py,sha256=12Ef_L7MlhNUN_0-n_3DggozWJER8c9J0us16cbvkKA,6062
156
+ pip/_internal/network/lazy_wheel.py,sha256=1b8ZJ1w4bSBzpGzGwJR_CL2yQ6AFIwWQkS1vbPPw2XU,7627
157
+ pip/_internal/network/session.py,sha256=38IKGKC64MTVUIH5XOR1hr2pOCzp39RccykdmGAvqRU,16729
158
+ pip/_internal/network/utils.py,sha256=igLlTu_-q0LmL8FdJKq-Uj7AT_owrQ-T9FfyarkhK5U,4059
159
+ pip/_internal/network/xmlrpc.py,sha256=AzQgG4GgS152_cqmGr_Oz2MIXsCal-xfsis7fA7nmU0,1791
160
+ pip/_internal/operations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
161
+ pip/_internal/operations/__pycache__/__init__.cpython-310.pyc,,
162
+ pip/_internal/operations/__pycache__/check.cpython-310.pyc,,
163
+ pip/_internal/operations/__pycache__/freeze.cpython-310.pyc,,
164
+ pip/_internal/operations/__pycache__/prepare.cpython-310.pyc,,
165
+ pip/_internal/operations/build/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
166
+ pip/_internal/operations/build/__pycache__/__init__.cpython-310.pyc,,
167
+ pip/_internal/operations/build/__pycache__/metadata.cpython-310.pyc,,
168
+ pip/_internal/operations/build/__pycache__/metadata_editable.cpython-310.pyc,,
169
+ pip/_internal/operations/build/__pycache__/metadata_legacy.cpython-310.pyc,,
170
+ pip/_internal/operations/build/__pycache__/wheel.cpython-310.pyc,,
171
+ pip/_internal/operations/build/__pycache__/wheel_editable.cpython-310.pyc,,
172
+ pip/_internal/operations/build/__pycache__/wheel_legacy.cpython-310.pyc,,
173
+ pip/_internal/operations/build/metadata.py,sha256=ES_uRmAvhrNm_nDTpZxshBfUsvnXtkj-g_4rZrH9Rww,1404
174
+ pip/_internal/operations/build/metadata_editable.py,sha256=_Rai0VZjxoeJUkjkuICrq45LtjwFoDOveosMYH43rKc,1456
175
+ pip/_internal/operations/build/metadata_legacy.py,sha256=o-eU21As175hDC7dluM1fJJ_FqokTIShyWpjKaIpHZw,2198
176
+ pip/_internal/operations/build/wheel.py,sha256=AO9XnTGhTgHtZmU8Dkbfo1OGr41rBuSDjIgAa4zUKgE,1063
177
+ pip/_internal/operations/build/wheel_editable.py,sha256=TVETY-L_M_dSEKBhTIcQOP75zKVXw8tuq1U354Mm30A,1405
178
+ pip/_internal/operations/build/wheel_legacy.py,sha256=C9j6rukgQI1n_JeQLoZGuDdfUwzCXShyIdPTp6edbMQ,3064
179
+ pip/_internal/operations/check.py,sha256=ca4O9CkPt9Em9sLCf3H0iVt1GIcW7M8C0U5XooaBuT4,5109
180
+ pip/_internal/operations/freeze.py,sha256=ZiYw5GlUpLVx4VJHz4S1AP2JFNyvH0iq5kpcYj2ovyw,9770
181
+ pip/_internal/operations/install/__init__.py,sha256=mX7hyD2GNBO2mFGokDQ30r_GXv7Y_PLdtxcUv144e-s,51
182
+ pip/_internal/operations/install/__pycache__/__init__.cpython-310.pyc,,
183
+ pip/_internal/operations/install/__pycache__/editable_legacy.cpython-310.pyc,,
184
+ pip/_internal/operations/install/__pycache__/legacy.cpython-310.pyc,,
185
+ pip/_internal/operations/install/__pycache__/wheel.cpython-310.pyc,,
186
+ pip/_internal/operations/install/editable_legacy.py,sha256=ee4kfJHNuzTdKItbfAsNOSEwq_vD7DRPGkBdK48yBhU,1354
187
+ pip/_internal/operations/install/legacy.py,sha256=x7BG8kBm0K3JO6AR4sBl0zh2LOrfUaz7EdNt-keHBv4,4091
188
+ pip/_internal/operations/install/wheel.py,sha256=QuQyCZE-XjuJjDYRixo40oUt2ucFhNmSrCbcXY7A9aE,27412
189
+ pip/_internal/operations/prepare.py,sha256=LJP97jsuiCAaTGVIRrcINvxc1ntVsB45MoRbyMIukg4,24145
190
+ pip/_internal/pyproject.py,sha256=Wm2ljdT6spC-tSdf1LBRaMYSJaXr1xUxV3OwdHCW9jc,6722
191
+ pip/_internal/req/__init__.py,sha256=A7mUvT1KAcCYP3H7gUOTx2GRMlgoDur3H68Q0OJqM5A,2793
192
+ pip/_internal/req/__pycache__/__init__.cpython-310.pyc,,
193
+ pip/_internal/req/__pycache__/constructors.cpython-310.pyc,,
194
+ pip/_internal/req/__pycache__/req_file.cpython-310.pyc,,
195
+ pip/_internal/req/__pycache__/req_install.cpython-310.pyc,,
196
+ pip/_internal/req/__pycache__/req_set.cpython-310.pyc,,
197
+ pip/_internal/req/__pycache__/req_tracker.cpython-310.pyc,,
198
+ pip/_internal/req/__pycache__/req_uninstall.cpython-310.pyc,,
199
+ pip/_internal/req/constructors.py,sha256=fXmtNI_J77JFP_HRvYcQW-1nKw3AiUu6Q3b1Nm8aMm0,16094
200
+ pip/_internal/req/req_file.py,sha256=5N8OTouPCof-305StC2YK9HBxQMw-xO46skRoBPbkZo,17421
201
+ pip/_internal/req/req_install.py,sha256=jU1HQBT_DnXZean7jY8wPNMhb6_CzdKHcilHFY_o-Fc,32524
202
+ pip/_internal/req/req_set.py,sha256=kHYiLvkKRx21WaLTwOI-54Ng0SSzZZ9SE7FD0PsfvYA,7584
203
+ pip/_internal/req/req_tracker.py,sha256=jK7JDu-Wt73X-gqozrFtgJVlUlnQo0P4IQ4x4_gPlfM,4117
204
+ pip/_internal/req/req_uninstall.py,sha256=K2BHYRRJAfkSpFqcPzc9XfX2EvbhaRtQIPRFmMtUdfo,23814
205
+ pip/_internal/resolution/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
206
+ pip/_internal/resolution/__pycache__/__init__.cpython-310.pyc,,
207
+ pip/_internal/resolution/__pycache__/base.cpython-310.pyc,,
208
+ pip/_internal/resolution/base.py,sha256=qlmh325SBVfvG6Me9gc5Nsh5sdwHBwzHBq6aEXtKsLA,583
209
+ pip/_internal/resolution/legacy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
210
+ pip/_internal/resolution/legacy/__pycache__/__init__.cpython-310.pyc,,
211
+ pip/_internal/resolution/legacy/__pycache__/resolver.cpython-310.pyc,,
212
+ pip/_internal/resolution/legacy/resolver.py,sha256=b7bf5qL1ROg73sl8dhTvLdD1w5XF8xybBAF6eF_kz7c,18288
213
+ pip/_internal/resolution/resolvelib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
214
+ pip/_internal/resolution/resolvelib/__pycache__/__init__.cpython-310.pyc,,
215
+ pip/_internal/resolution/resolvelib/__pycache__/base.cpython-310.pyc,,
216
+ pip/_internal/resolution/resolvelib/__pycache__/candidates.cpython-310.pyc,,
217
+ pip/_internal/resolution/resolvelib/__pycache__/factory.cpython-310.pyc,,
218
+ pip/_internal/resolution/resolvelib/__pycache__/found_candidates.cpython-310.pyc,,
219
+ pip/_internal/resolution/resolvelib/__pycache__/provider.cpython-310.pyc,,
220
+ pip/_internal/resolution/resolvelib/__pycache__/reporter.cpython-310.pyc,,
221
+ pip/_internal/resolution/resolvelib/__pycache__/requirements.cpython-310.pyc,,
222
+ pip/_internal/resolution/resolvelib/__pycache__/resolver.cpython-310.pyc,,
223
+ pip/_internal/resolution/resolvelib/base.py,sha256=u1O4fkvCO4mhmu5i32xrDv9AX5NgUci_eYVyBDQhTIM,5220
224
+ pip/_internal/resolution/resolvelib/candidates.py,sha256=KR5jxZRSahByOABXbwrX-zNoawa7Gm9Iss-HrvrcvNw,18357
225
+ pip/_internal/resolution/resolvelib/factory.py,sha256=0bbxnUSSjaeTmtIEgeeKtEqhEFfNhv3xpq7j9IaMq2c,28298
226
+ pip/_internal/resolution/resolvelib/found_candidates.py,sha256=hvL3Hoa9VaYo-qEOZkBi2Iqw251UDxPz-uMHVaWmLpE,5705
227
+ pip/_internal/resolution/resolvelib/provider.py,sha256=LzQQyzMVaZYAwLgKInbq-it6mbQL1gX0hGohz5Cr5wg,9915
228
+ pip/_internal/resolution/resolvelib/reporter.py,sha256=3ZVVYrs5PqvLFJkGLcuXoMK5mTInFzl31xjUpDBpZZk,2526
229
+ pip/_internal/resolution/resolvelib/requirements.py,sha256=B1ndvKPSuyyyTEXt9sKhbwminViSWnBrJa7qO2ln4Z0,5455
230
+ pip/_internal/resolution/resolvelib/resolver.py,sha256=ucoVKHtwH6gkZjcfIVJbUiOIHLqJxeYlrKTMIJciYwM,11335
231
+ pip/_internal/self_outdated_check.py,sha256=GKSatNlt2cz_CMGxu72FbUzuPaXpWOnIVKOOYIk0gvY,6849
232
+ pip/_internal/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
233
+ pip/_internal/utils/__pycache__/__init__.cpython-310.pyc,,
234
+ pip/_internal/utils/__pycache__/_log.cpython-310.pyc,,
235
+ pip/_internal/utils/__pycache__/appdirs.cpython-310.pyc,,
236
+ pip/_internal/utils/__pycache__/compat.cpython-310.pyc,,
237
+ pip/_internal/utils/__pycache__/compatibility_tags.cpython-310.pyc,,
238
+ pip/_internal/utils/__pycache__/datetime.cpython-310.pyc,,
239
+ pip/_internal/utils/__pycache__/deprecation.cpython-310.pyc,,
240
+ pip/_internal/utils/__pycache__/direct_url_helpers.cpython-310.pyc,,
241
+ pip/_internal/utils/__pycache__/distutils_args.cpython-310.pyc,,
242
+ pip/_internal/utils/__pycache__/egg_link.cpython-310.pyc,,
243
+ pip/_internal/utils/__pycache__/encoding.cpython-310.pyc,,
244
+ pip/_internal/utils/__pycache__/entrypoints.cpython-310.pyc,,
245
+ pip/_internal/utils/__pycache__/filesystem.cpython-310.pyc,,
246
+ pip/_internal/utils/__pycache__/filetypes.cpython-310.pyc,,
247
+ pip/_internal/utils/__pycache__/glibc.cpython-310.pyc,,
248
+ pip/_internal/utils/__pycache__/hashes.cpython-310.pyc,,
249
+ pip/_internal/utils/__pycache__/inject_securetransport.cpython-310.pyc,,
250
+ pip/_internal/utils/__pycache__/logging.cpython-310.pyc,,
251
+ pip/_internal/utils/__pycache__/misc.cpython-310.pyc,,
252
+ pip/_internal/utils/__pycache__/models.cpython-310.pyc,,
253
+ pip/_internal/utils/__pycache__/packaging.cpython-310.pyc,,
254
+ pip/_internal/utils/__pycache__/setuptools_build.cpython-310.pyc,,
255
+ pip/_internal/utils/__pycache__/subprocess.cpython-310.pyc,,
256
+ pip/_internal/utils/__pycache__/temp_dir.cpython-310.pyc,,
257
+ pip/_internal/utils/__pycache__/unpacking.cpython-310.pyc,,
258
+ pip/_internal/utils/__pycache__/urls.cpython-310.pyc,,
259
+ pip/_internal/utils/__pycache__/virtualenv.cpython-310.pyc,,
260
+ pip/_internal/utils/__pycache__/wheel.cpython-310.pyc,,
261
+ pip/_internal/utils/_log.py,sha256=-jHLOE_THaZz5BFcCnoSL9EYAtJ0nXem49s9of4jvKw,1015
262
+ pip/_internal/utils/appdirs.py,sha256=swgcTKOm3daLeXTW6v5BUS2Ti2RvEnGRQYH_yDXklAo,1665
263
+ pip/_internal/utils/compat.py,sha256=ACyBfLgj3_XG-iA5omEDrXqDM0cQKzi8h8HRBInzG6Q,1884
264
+ pip/_internal/utils/compatibility_tags.py,sha256=ydin8QG8BHqYRsPY4OL6cmb44CbqXl1T0xxS97VhHkk,5377
265
+ pip/_internal/utils/datetime.py,sha256=m21Y3wAtQc-ji6Veb6k_M5g6A0ZyFI4egchTdnwh-pQ,242
266
+ pip/_internal/utils/deprecation.py,sha256=NKo8VqLioJ4nnXXGmW4KdasxF90EFHkZaHeX1fT08C8,3627
267
+ pip/_internal/utils/direct_url_helpers.py,sha256=6F1tc2rcKaCZmgfVwsE6ObIe_Pux23mUVYA-2D9wCFc,3206
268
+ pip/_internal/utils/distutils_args.py,sha256=mcAscyp80vTt3xAGTipnpgc83V-_wCvydNELVXLq7JI,1249
269
+ pip/_internal/utils/egg_link.py,sha256=5MVlpz5LirT4iLQq86OYzjXaYF0D4Qk1dprEI7ThST4,2203
270
+ pip/_internal/utils/encoding.py,sha256=bdZ3YgUpaOEBI5MP4-DEXiQarCW3V0rxw1kRz-TaU1Q,1169
271
+ pip/_internal/utils/entrypoints.py,sha256=aPvCnQVi9Hdk35Kloww_D5ibjUpqxgqcJP8O9VuMZek,1055
272
+ pip/_internal/utils/filesystem.py,sha256=rrl-rY1w8TYyKYndUyZlE9ffkQyA4-jI9x_59zXkn5s,5893
273
+ pip/_internal/utils/filetypes.py,sha256=i8XAQ0eFCog26Fw9yV0Yb1ygAqKYB1w9Cz9n0fj8gZU,716
274
+ pip/_internal/utils/glibc.py,sha256=tDfwVYnJCOC0BNVpItpy8CGLP9BjkxFHdl0mTS0J7fc,3110
275
+ pip/_internal/utils/hashes.py,sha256=anpZfFGIT6HcIj2td9NHtE8AWg6GeAIhwpP8GPvZE0E,4811
276
+ pip/_internal/utils/inject_securetransport.py,sha256=o-QRVMGiENrTJxw3fAhA7uxpdEdw6M41TjHYtSVRrcg,795
277
+ pip/_internal/utils/logging.py,sha256=Rvght-fDXL70VWib1cpgZ3iU-kXODV98bNeLUlbqVto,11522
278
+ pip/_internal/utils/misc.py,sha256=MdUB12BMhj73sEmskEutmPyWFaJB7asoPCfLzs_YeT0,19359
279
+ pip/_internal/utils/models.py,sha256=5GoYU586SrxURMvDn_jBMJInitviJg4O5-iOU-6I0WY,1193
280
+ pip/_internal/utils/packaging.py,sha256=5Wm6_x7lKrlqVjPI5MBN_RurcRHwVYoQ7Ksrs84de7s,2108
281
+ pip/_internal/utils/setuptools_build.py,sha256=vNH9hQB9wT6d-h1hVQhBKw91jNeT42meHpVeii-urOI,5652
282
+ pip/_internal/utils/subprocess.py,sha256=vIWGpet5ARBmZ2Qn4NEHNgzCOduqbPIuByZmhhmr6mM,9182
283
+ pip/_internal/utils/temp_dir.py,sha256=zob3PYMVevONkheOMUp_4jDofrEY3HIu5DHK78cSspI,7662
284
+ pip/_internal/utils/unpacking.py,sha256=HUFlMEyCa9dPwdLh6sWeh95DeKytV8rsOyKShEw9y6g,8906
285
+ pip/_internal/utils/urls.py,sha256=AhaesUGl-9it6uvG6fsFPOr9ynFpGaTMk4t5XTX7Z_Q,1759
286
+ pip/_internal/utils/virtualenv.py,sha256=4_48qMzCwB_F5jIK5BC_ua7uiAMVifmQWU9NdaGUoVA,3459
287
+ pip/_internal/utils/wheel.py,sha256=lXOgZyTlOm5HmK8tw5iw0A3_5A6wRzsXHOaQkIvvloU,4549
288
+ pip/_internal/vcs/__init__.py,sha256=UAqvzpbi0VbZo3Ub6skEeZAw-ooIZR-zX_WpCbxyCoU,596
289
+ pip/_internal/vcs/__pycache__/__init__.cpython-310.pyc,,
290
+ pip/_internal/vcs/__pycache__/bazaar.cpython-310.pyc,,
291
+ pip/_internal/vcs/__pycache__/git.cpython-310.pyc,,
292
+ pip/_internal/vcs/__pycache__/mercurial.cpython-310.pyc,,
293
+ pip/_internal/vcs/__pycache__/subversion.cpython-310.pyc,,
294
+ pip/_internal/vcs/__pycache__/versioncontrol.cpython-310.pyc,,
295
+ pip/_internal/vcs/bazaar.py,sha256=IGb5ca1xSZfgegRD2_JeyoZPrQQHs7lEYEIgpVsKpoU,3047
296
+ pip/_internal/vcs/git.py,sha256=mjhwudCx9WlLNkxZ6_kOKmueF0rLoU2i1xeASKF6yiQ,18116
297
+ pip/_internal/vcs/mercurial.py,sha256=Bzbd518Jsx-EJI0IhIobiQqiRsUv5TWYnrmRIFWE0Gw,5238
298
+ pip/_internal/vcs/subversion.py,sha256=TEMRdwECvMcXakZX0pTNUep79kmBYkWDkWFkrYmcmac,11718
299
+ pip/_internal/vcs/versioncontrol.py,sha256=KUOc-hN51em9jrqxKwUR3JnkgSE-xSOqMiiJcSaL6B8,22811
300
+ pip/_internal/wheel_builder.py,sha256=65rOA8FSYt3c3HyqEw17uujjlCgqmoKEIv6rv9xN2NM,12307
301
+ pip/_vendor/__init__.py,sha256=xjcBX0EP50pkaMdCssrsBXoZgo2hTtYxlcH1CIyA3T4,4708
302
+ pip/_vendor/__pycache__/__init__.cpython-310.pyc,,
303
+ pip/_vendor/__pycache__/distro.cpython-310.pyc,,
304
+ pip/_vendor/__pycache__/six.cpython-310.pyc,,
305
+ pip/_vendor/__pycache__/typing_extensions.cpython-310.pyc,,
306
+ pip/_vendor/cachecontrol/__init__.py,sha256=1j_YQfjmiix6YyouLrftC6NzksAm8e8xGSjMKMRPIkM,465
307
+ pip/_vendor/cachecontrol/__pycache__/__init__.cpython-310.pyc,,
308
+ pip/_vendor/cachecontrol/__pycache__/_cmd.cpython-310.pyc,,
309
+ pip/_vendor/cachecontrol/__pycache__/adapter.cpython-310.pyc,,
310
+ pip/_vendor/cachecontrol/__pycache__/cache.cpython-310.pyc,,
311
+ pip/_vendor/cachecontrol/__pycache__/compat.cpython-310.pyc,,
312
+ pip/_vendor/cachecontrol/__pycache__/controller.cpython-310.pyc,,
313
+ pip/_vendor/cachecontrol/__pycache__/filewrapper.cpython-310.pyc,,
314
+ pip/_vendor/cachecontrol/__pycache__/heuristics.cpython-310.pyc,,
315
+ pip/_vendor/cachecontrol/__pycache__/serialize.cpython-310.pyc,,
316
+ pip/_vendor/cachecontrol/__pycache__/wrapper.cpython-310.pyc,,
317
+ pip/_vendor/cachecontrol/_cmd.py,sha256=lxUXqfNTVx84zf6tcWbkLZHA6WVBRtJRpfeA9ZqhaAY,1379
318
+ pip/_vendor/cachecontrol/adapter.py,sha256=ew9OYEQHEOjvGl06ZsuX8W3DAvHWsQKHwWAxISyGug8,5033
319
+ pip/_vendor/cachecontrol/cache.py,sha256=eMS9Bn9JWQkHiIYA5GPRBqKVU95uS-yXkxrzpoafRig,917
320
+ pip/_vendor/cachecontrol/caches/__init__.py,sha256=gGFOtIH8QDRvkP4YAfGIh-u9YYcGZVxwLM1-6e1mPNI,170
321
+ pip/_vendor/cachecontrol/caches/__pycache__/__init__.cpython-310.pyc,,
322
+ pip/_vendor/cachecontrol/caches/__pycache__/file_cache.cpython-310.pyc,,
323
+ pip/_vendor/cachecontrol/caches/__pycache__/redis_cache.cpython-310.pyc,,
324
+ pip/_vendor/cachecontrol/caches/file_cache.py,sha256=P2KHcNXiqxEW7fCq5KC-NYHGSk0nNR9NIKuN-vBTn-E,4251
325
+ pip/_vendor/cachecontrol/caches/redis_cache.py,sha256=tu_YBV7EV8vdBRGazUErkoRqYYjSBmNcB8dZ7BNomqk,940
326
+ pip/_vendor/cachecontrol/compat.py,sha256=LNx7vqBndYdHU8YuJt53ab_8rzMGTXVrvMb7CZJkxG0,778
327
+ pip/_vendor/cachecontrol/controller.py,sha256=9DSEiV58Gx7Ce69fLCrRcpN-_sHzXTY4ol9bEviatR0,15625
328
+ pip/_vendor/cachecontrol/filewrapper.py,sha256=X4BAQOO26GNOR7nH_fhTzAfeuct2rBQcx_15MyFBpcs,3946
329
+ pip/_vendor/cachecontrol/heuristics.py,sha256=8kAyuZLSCyEIgQr6vbUwfhpqg9ows4mM0IV6DWazevI,4154
330
+ pip/_vendor/cachecontrol/serialize.py,sha256=dlySaeA5U7Q5eHvjiObgo1M8j8_huVjfWjid7Aq-r8c,6783
331
+ pip/_vendor/cachecontrol/wrapper.py,sha256=X3-KMZ20Ho3VtqyVaXclpeQpFzokR5NE8tZSfvKVaB8,774
332
+ pip/_vendor/certifi/__init__.py,sha256=xWdRgntT3j1V95zkRipGOg_A1UfEju2FcpujhysZLRI,62
333
+ pip/_vendor/certifi/__main__.py,sha256=1k3Cr95vCxxGRGDljrW3wMdpZdL3Nhf0u1n-k2qdsCY,255
334
+ pip/_vendor/certifi/__pycache__/__init__.cpython-310.pyc,,
335
+ pip/_vendor/certifi/__pycache__/__main__.cpython-310.pyc,,
336
+ pip/_vendor/certifi/__pycache__/core.cpython-310.pyc,,
337
+ pip/_vendor/certifi/cacert.pem,sha256=-og4Keu4zSpgL5shwfhd4kz0eUnVILzrGCi0zRy2kGw,265969
338
+ pip/_vendor/certifi/core.py,sha256=CcwptmiI-3M50jIdO0HT6Fh6W_wqGsf8QcX9yfzvyuc,2791
339
+ pip/_vendor/chardet/__init__.py,sha256=mWZaWmvZkhwfBEAT9O1Y6nRTfKzhT7FHhQTTAujbqUA,3271
340
+ pip/_vendor/chardet/__pycache__/__init__.cpython-310.pyc,,
341
+ pip/_vendor/chardet/__pycache__/big5freq.cpython-310.pyc,,
342
+ pip/_vendor/chardet/__pycache__/big5prober.cpython-310.pyc,,
343
+ pip/_vendor/chardet/__pycache__/chardistribution.cpython-310.pyc,,
344
+ pip/_vendor/chardet/__pycache__/charsetgroupprober.cpython-310.pyc,,
345
+ pip/_vendor/chardet/__pycache__/charsetprober.cpython-310.pyc,,
346
+ pip/_vendor/chardet/__pycache__/codingstatemachine.cpython-310.pyc,,
347
+ pip/_vendor/chardet/__pycache__/compat.cpython-310.pyc,,
348
+ pip/_vendor/chardet/__pycache__/cp949prober.cpython-310.pyc,,
349
+ pip/_vendor/chardet/__pycache__/enums.cpython-310.pyc,,
350
+ pip/_vendor/chardet/__pycache__/escprober.cpython-310.pyc,,
351
+ pip/_vendor/chardet/__pycache__/escsm.cpython-310.pyc,,
352
+ pip/_vendor/chardet/__pycache__/eucjpprober.cpython-310.pyc,,
353
+ pip/_vendor/chardet/__pycache__/euckrfreq.cpython-310.pyc,,
354
+ pip/_vendor/chardet/__pycache__/euckrprober.cpython-310.pyc,,
355
+ pip/_vendor/chardet/__pycache__/euctwfreq.cpython-310.pyc,,
356
+ pip/_vendor/chardet/__pycache__/euctwprober.cpython-310.pyc,,
357
+ pip/_vendor/chardet/__pycache__/gb2312freq.cpython-310.pyc,,
358
+ pip/_vendor/chardet/__pycache__/gb2312prober.cpython-310.pyc,,
359
+ pip/_vendor/chardet/__pycache__/hebrewprober.cpython-310.pyc,,
360
+ pip/_vendor/chardet/__pycache__/jisfreq.cpython-310.pyc,,
361
+ pip/_vendor/chardet/__pycache__/jpcntx.cpython-310.pyc,,
362
+ pip/_vendor/chardet/__pycache__/langbulgarianmodel.cpython-310.pyc,,
363
+ pip/_vendor/chardet/__pycache__/langgreekmodel.cpython-310.pyc,,
364
+ pip/_vendor/chardet/__pycache__/langhebrewmodel.cpython-310.pyc,,
365
+ pip/_vendor/chardet/__pycache__/langhungarianmodel.cpython-310.pyc,,
366
+ pip/_vendor/chardet/__pycache__/langrussianmodel.cpython-310.pyc,,
367
+ pip/_vendor/chardet/__pycache__/langthaimodel.cpython-310.pyc,,
368
+ pip/_vendor/chardet/__pycache__/langturkishmodel.cpython-310.pyc,,
369
+ pip/_vendor/chardet/__pycache__/latin1prober.cpython-310.pyc,,
370
+ pip/_vendor/chardet/__pycache__/mbcharsetprober.cpython-310.pyc,,
371
+ pip/_vendor/chardet/__pycache__/mbcsgroupprober.cpython-310.pyc,,
372
+ pip/_vendor/chardet/__pycache__/mbcssm.cpython-310.pyc,,
373
+ pip/_vendor/chardet/__pycache__/sbcharsetprober.cpython-310.pyc,,
374
+ pip/_vendor/chardet/__pycache__/sbcsgroupprober.cpython-310.pyc,,
375
+ pip/_vendor/chardet/__pycache__/sjisprober.cpython-310.pyc,,
376
+ pip/_vendor/chardet/__pycache__/universaldetector.cpython-310.pyc,,
377
+ pip/_vendor/chardet/__pycache__/utf8prober.cpython-310.pyc,,
378
+ pip/_vendor/chardet/__pycache__/version.cpython-310.pyc,,
379
+ pip/_vendor/chardet/big5freq.py,sha256=D_zK5GyzoVsRes0HkLJziltFQX0bKCLOrFe9_xDvO_8,31254
380
+ pip/_vendor/chardet/big5prober.py,sha256=kBxHbdetBpPe7xrlb-e990iot64g_eGSLd32lB7_h3M,1757
381
+ pip/_vendor/chardet/chardistribution.py,sha256=3woWS62KrGooKyqz4zQSnjFbJpa6V7g02daAibTwcl8,9411
382
+ pip/_vendor/chardet/charsetgroupprober.py,sha256=GZLReHP6FRRn43hvSOoGCxYamErKzyp6RgOQxVeC3kg,3839
383
+ pip/_vendor/chardet/charsetprober.py,sha256=KSmwJErjypyj0bRZmC5F5eM7c8YQgLYIjZXintZNstg,5110
384
+ pip/_vendor/chardet/cli/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
385
+ pip/_vendor/chardet/cli/__pycache__/__init__.cpython-310.pyc,,
386
+ pip/_vendor/chardet/cli/__pycache__/chardetect.cpython-310.pyc,,
387
+ pip/_vendor/chardet/cli/chardetect.py,sha256=XK5zqjUG2a4-y6eLHZ8ThYcp6WWUrdlmELxNypcc2SE,2747
388
+ pip/_vendor/chardet/codingstatemachine.py,sha256=VYp_6cyyki5sHgXDSZnXW4q1oelHc3cu9AyQTX7uug8,3590
389
+ pip/_vendor/chardet/compat.py,sha256=40zr6wICZwknxyuLGGcIOPyve8DTebBCbbvttvnmp5Q,1200
390
+ pip/_vendor/chardet/cp949prober.py,sha256=TZ434QX8zzBsnUvL_8wm4AQVTZ2ZkqEEQL_lNw9f9ow,1855
391
+ pip/_vendor/chardet/enums.py,sha256=Aimwdb9as1dJKZaFNUH2OhWIVBVd6ZkJJ_WK5sNY8cU,1661
392
+ pip/_vendor/chardet/escprober.py,sha256=kkyqVg1Yw3DIOAMJ2bdlyQgUFQhuHAW8dUGskToNWSc,3950
393
+ pip/_vendor/chardet/escsm.py,sha256=RuXlgNvTIDarndvllNCk5WZBIpdCxQ0kcd9EAuxUh84,10510
394
+ pip/_vendor/chardet/eucjpprober.py,sha256=iD8Jdp0ISRjgjiVN7f0e8xGeQJ5GM2oeZ1dA8nbSeUw,3749
395
+ pip/_vendor/chardet/euckrfreq.py,sha256=-7GdmvgWez4-eO4SuXpa7tBiDi5vRXQ8WvdFAzVaSfo,13546
396
+ pip/_vendor/chardet/euckrprober.py,sha256=MqFMTQXxW4HbzIpZ9lKDHB3GN8SP4yiHenTmf8g_PxY,1748
397
+ pip/_vendor/chardet/euctwfreq.py,sha256=No1WyduFOgB5VITUA7PLyC5oJRNzRyMbBxaKI1l16MA,31621
398
+ pip/_vendor/chardet/euctwprober.py,sha256=13p6EP4yRaxqnP4iHtxHOJ6R2zxHq1_m8hTRjzVZ95c,1747
399
+ pip/_vendor/chardet/gb2312freq.py,sha256=JX8lsweKLmnCwmk8UHEQsLgkr_rP_kEbvivC4qPOrlc,20715
400
+ pip/_vendor/chardet/gb2312prober.py,sha256=gGvIWi9WhDjE-xQXHvNIyrnLvEbMAYgyUSZ65HUfylw,1754
401
+ pip/_vendor/chardet/hebrewprober.py,sha256=c3SZ-K7hvyzGY6JRAZxJgwJ_sUS9k0WYkvMY00YBYFo,13838
402
+ pip/_vendor/chardet/jisfreq.py,sha256=vpmJv2Bu0J8gnMVRPHMFefTRvo_ha1mryLig8CBwgOg,25777
403
+ pip/_vendor/chardet/jpcntx.py,sha256=PYlNqRUQT8LM3cT5FmHGP0iiscFlTWED92MALvBungo,19643
404
+ pip/_vendor/chardet/langbulgarianmodel.py,sha256=rk9CJpuxO0bObboJcv6gNgWuosYZmd8qEEds5y7DS_Y,105697
405
+ pip/_vendor/chardet/langgreekmodel.py,sha256=S-uNQ1ihC75yhBvSux24gLFZv3QyctMwC6OxLJdX-bw,99571
406
+ pip/_vendor/chardet/langhebrewmodel.py,sha256=DzPP6TPGG_-PV7tqspu_d8duueqm7uN-5eQ0aHUw1Gg,98776
407
+ pip/_vendor/chardet/langhungarianmodel.py,sha256=RtJH7DZdsmaHqyK46Kkmnk5wQHiJwJPPJSqqIlpeZRc,102498
408
+ pip/_vendor/chardet/langrussianmodel.py,sha256=THqJOhSxiTQcHboDNSc5yofc2koXXQFHFyjtyuntUfM,131180
409
+ pip/_vendor/chardet/langthaimodel.py,sha256=R1wXHnUMtejpw0JnH_JO8XdYasME6wjVqp1zP7TKLgg,103312
410
+ pip/_vendor/chardet/langturkishmodel.py,sha256=rfwanTptTwSycE4-P-QasPmzd-XVYgevytzjlEzBBu8,95946
411
+ pip/_vendor/chardet/latin1prober.py,sha256=S2IoORhFk39FEFOlSFWtgVybRiP6h7BlLldHVclNkU8,5370
412
+ pip/_vendor/chardet/mbcharsetprober.py,sha256=AR95eFH9vuqSfvLQZN-L5ijea25NOBCoXqw8s5O9xLQ,3413
413
+ pip/_vendor/chardet/mbcsgroupprober.py,sha256=h6TRnnYq2OxG1WdD5JOyxcdVpn7dG0q-vB8nWr5mbh4,2012
414
+ pip/_vendor/chardet/mbcssm.py,sha256=SY32wVIF3HzcjY3BaEspy9metbNSKxIIB0RKPn7tjpI,25481
415
+ pip/_vendor/chardet/metadata/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
416
+ pip/_vendor/chardet/metadata/__pycache__/__init__.cpython-310.pyc,,
417
+ pip/_vendor/chardet/metadata/__pycache__/languages.cpython-310.pyc,,
418
+ pip/_vendor/chardet/metadata/languages.py,sha256=41tLq3eLSrBEbEVVQpVGFq9K7o1ln9b1HpY1l0hCUQo,19474
419
+ pip/_vendor/chardet/sbcharsetprober.py,sha256=nmyMyuxzG87DN6K3Rk2MUzJLMLR69MrWpdnHzOwVUwQ,6136
420
+ pip/_vendor/chardet/sbcsgroupprober.py,sha256=hqefQuXmiFyDBArOjujH6hd6WFXlOD1kWCsxDhjx5Vc,4309
421
+ pip/_vendor/chardet/sjisprober.py,sha256=IIt-lZj0WJqK4rmUZzKZP4GJlE8KUEtFYVuY96ek5MQ,3774
422
+ pip/_vendor/chardet/universaldetector.py,sha256=DpZTXCX0nUHXxkQ9sr4GZxGB_hveZ6hWt3uM94cgWKs,12503
423
+ pip/_vendor/chardet/utf8prober.py,sha256=IdD8v3zWOsB8OLiyPi-y_fqwipRFxV9Nc1eKBLSuIEw,2766
424
+ pip/_vendor/chardet/version.py,sha256=A4CILFAd8MRVG1HoXPp45iK9RLlWyV73a1EtwE8Tvn8,242
425
+ pip/_vendor/colorama/__init__.py,sha256=pCdErryzLSzDW5P-rRPBlPLqbBtIRNJB6cMgoeJns5k,239
426
+ pip/_vendor/colorama/__pycache__/__init__.cpython-310.pyc,,
427
+ pip/_vendor/colorama/__pycache__/ansi.cpython-310.pyc,,
428
+ pip/_vendor/colorama/__pycache__/ansitowin32.cpython-310.pyc,,
429
+ pip/_vendor/colorama/__pycache__/initialise.cpython-310.pyc,,
430
+ pip/_vendor/colorama/__pycache__/win32.cpython-310.pyc,,
431
+ pip/_vendor/colorama/__pycache__/winterm.cpython-310.pyc,,
432
+ pip/_vendor/colorama/ansi.py,sha256=Top4EeEuaQdBWdteKMEcGOTeKeF19Q-Wo_6_Cj5kOzQ,2522
433
+ pip/_vendor/colorama/ansitowin32.py,sha256=yV7CEmCb19MjnJKODZEEvMH_fnbJhwnpzo4sxZuGXmA,10517
434
+ pip/_vendor/colorama/initialise.py,sha256=PprovDNxMTrvoNHFcL2NZjpH2XzDc8BLxLxiErfUl4k,1915
435
+ pip/_vendor/colorama/win32.py,sha256=bJ8Il9jwaBN5BJ8bmN6FoYZ1QYuMKv2j8fGrXh7TJjw,5404
436
+ pip/_vendor/colorama/winterm.py,sha256=2y_2b7Zsv34feAsP67mLOVc-Bgq51mdYGo571VprlrM,6438
437
+ pip/_vendor/distlib/__init__.py,sha256=y-rKDBB99QJ3N1PJGAXQo89ou615aAeBjV2brBxKgM8,581
438
+ pip/_vendor/distlib/__pycache__/__init__.cpython-310.pyc,,
439
+ pip/_vendor/distlib/__pycache__/compat.cpython-310.pyc,,
440
+ pip/_vendor/distlib/__pycache__/database.cpython-310.pyc,,
441
+ pip/_vendor/distlib/__pycache__/index.cpython-310.pyc,,
442
+ pip/_vendor/distlib/__pycache__/locators.cpython-310.pyc,,
443
+ pip/_vendor/distlib/__pycache__/manifest.cpython-310.pyc,,
444
+ pip/_vendor/distlib/__pycache__/markers.cpython-310.pyc,,
445
+ pip/_vendor/distlib/__pycache__/metadata.cpython-310.pyc,,
446
+ pip/_vendor/distlib/__pycache__/resources.cpython-310.pyc,,
447
+ pip/_vendor/distlib/__pycache__/scripts.cpython-310.pyc,,
448
+ pip/_vendor/distlib/__pycache__/util.cpython-310.pyc,,
449
+ pip/_vendor/distlib/__pycache__/version.cpython-310.pyc,,
450
+ pip/_vendor/distlib/__pycache__/wheel.cpython-310.pyc,,
451
+ pip/_vendor/distlib/compat.py,sha256=tfoMrj6tujk7G4UC2owL6ArgDuCKabgBxuJRGZSmpko,41259
452
+ pip/_vendor/distlib/database.py,sha256=hBO2dgvDF7W3BqX8Ecns6p_RPerCaIbNKbdUOuJ1a14,51456
453
+ pip/_vendor/distlib/index.py,sha256=UfcimNW19AB7IKWam4VaJbXuCBvArKfSxhV16EwavzE,20739
454
+ pip/_vendor/distlib/locators.py,sha256=4D2hEcHePNuW4mXEZ3Cuw12eW-vbO-4WuAlbf4h5K7w,51963
455
+ pip/_vendor/distlib/manifest.py,sha256=nQEhYmgoreaBZzyFzwYsXxJARu3fo4EkunU163U16iE,14811
456
+ pip/_vendor/distlib/markers.py,sha256=TpHHHLgkzyT7YHbwj-2i6weRaq-Ivy2-MUnrDkjau-U,5058
457
+ pip/_vendor/distlib/metadata.py,sha256=vatoxFdmBr6ie-sTVXVNPOPG3uwMDWJTnEECnm7xDCw,39109
458
+ pip/_vendor/distlib/resources.py,sha256=LwbPksc0A1JMbi6XnuPdMBUn83X7BPuFNWqPGEKI698,10820
459
+ pip/_vendor/distlib/scripts.py,sha256=tjSwENINeV91ROZxec5zTSMRg2jEeKc4enyCHDzNvEE,17720
460
+ pip/_vendor/distlib/util.py,sha256=31dPXn3Rfat0xZLeVoFpuniyhe6vsbl9_QN-qd9Lhlk,66262
461
+ pip/_vendor/distlib/version.py,sha256=WG__LyAa2GwmA6qSoEJtvJE8REA1LZpbSizy8WvhJLk,23513
462
+ pip/_vendor/distlib/wheel.py,sha256=pj5VVCjqZMcHvgizORWwAFPS7hOk61CZ59dxP8laQ4E,42943
463
+ pip/_vendor/distro.py,sha256=O1EeHMq1-xAO373JI2_6pYEtd09yEkxtmrYkdY-9S-w,48414
464
+ pip/_vendor/html5lib/__init__.py,sha256=BYzcKCqeEii52xDrqBFruhnmtmkiuHXFyFh-cglQ8mk,1160
465
+ pip/_vendor/html5lib/__pycache__/__init__.cpython-310.pyc,,
466
+ pip/_vendor/html5lib/__pycache__/_ihatexml.cpython-310.pyc,,
467
+ pip/_vendor/html5lib/__pycache__/_inputstream.cpython-310.pyc,,
468
+ pip/_vendor/html5lib/__pycache__/_tokenizer.cpython-310.pyc,,
469
+ pip/_vendor/html5lib/__pycache__/_utils.cpython-310.pyc,,
470
+ pip/_vendor/html5lib/__pycache__/constants.cpython-310.pyc,,
471
+ pip/_vendor/html5lib/__pycache__/html5parser.cpython-310.pyc,,
472
+ pip/_vendor/html5lib/__pycache__/serializer.cpython-310.pyc,,
473
+ pip/_vendor/html5lib/_ihatexml.py,sha256=ifOwF7pXqmyThIXc3boWc96s4MDezqRrRVp7FwDYUFs,16728
474
+ pip/_vendor/html5lib/_inputstream.py,sha256=jErNASMlkgs7MpOM9Ve_VdLDJyFFweAjLuhVutZz33U,32353
475
+ pip/_vendor/html5lib/_tokenizer.py,sha256=04mgA2sNTniutl2fxFv-ei5bns4iRaPxVXXHh_HrV_4,77040
476
+ pip/_vendor/html5lib/_trie/__init__.py,sha256=nqfgO910329BEVJ5T4psVwQtjd2iJyEXQ2-X8c1YxwU,109
477
+ pip/_vendor/html5lib/_trie/__pycache__/__init__.cpython-310.pyc,,
478
+ pip/_vendor/html5lib/_trie/__pycache__/_base.cpython-310.pyc,,
479
+ pip/_vendor/html5lib/_trie/__pycache__/py.cpython-310.pyc,,
480
+ pip/_vendor/html5lib/_trie/_base.py,sha256=CaybYyMro8uERQYjby2tTeSUatnWDfWroUN9N7ety5w,1013
481
+ pip/_vendor/html5lib/_trie/py.py,sha256=wXmQLrZRf4MyWNyg0m3h81m9InhLR7GJ002mIIZh-8o,1775
482
+ pip/_vendor/html5lib/_utils.py,sha256=Dx9AKntksRjFT1veBj7I362pf5OgIaT0zglwq43RnfU,4931
483
+ pip/_vendor/html5lib/constants.py,sha256=Ll-yzLU_jcjyAI_h57zkqZ7aQWE5t5xA4y_jQgoUUhw,83464
484
+ pip/_vendor/html5lib/filters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
485
+ pip/_vendor/html5lib/filters/__pycache__/__init__.cpython-310.pyc,,
486
+ pip/_vendor/html5lib/filters/__pycache__/alphabeticalattributes.cpython-310.pyc,,
487
+ pip/_vendor/html5lib/filters/__pycache__/base.cpython-310.pyc,,
488
+ pip/_vendor/html5lib/filters/__pycache__/inject_meta_charset.cpython-310.pyc,,
489
+ pip/_vendor/html5lib/filters/__pycache__/lint.cpython-310.pyc,,
490
+ pip/_vendor/html5lib/filters/__pycache__/optionaltags.cpython-310.pyc,,
491
+ pip/_vendor/html5lib/filters/__pycache__/sanitizer.cpython-310.pyc,,
492
+ pip/_vendor/html5lib/filters/__pycache__/whitespace.cpython-310.pyc,,
493
+ pip/_vendor/html5lib/filters/alphabeticalattributes.py,sha256=lViZc2JMCclXi_5gduvmdzrRxtO5Xo9ONnbHBVCsykU,919
494
+ pip/_vendor/html5lib/filters/base.py,sha256=z-IU9ZAYjpsVsqmVt7kuWC63jR11hDMr6CVrvuao8W0,286
495
+ pip/_vendor/html5lib/filters/inject_meta_charset.py,sha256=egDXUEHXmAG9504xz0K6ALDgYkvUrC2q15YUVeNlVQg,2945
496
+ pip/_vendor/html5lib/filters/lint.py,sha256=jk6q56xY0ojiYfvpdP-OZSm9eTqcAdRqhCoPItemPYA,3643
497
+ pip/_vendor/html5lib/filters/optionaltags.py,sha256=8lWT75J0aBOHmPgfmqTHSfPpPMp01T84NKu0CRedxcE,10588
498
+ pip/_vendor/html5lib/filters/sanitizer.py,sha256=m6oGmkBhkGAnn2nV6D4hE78SCZ6WEnK9rKdZB3uXBIc,26897
499
+ pip/_vendor/html5lib/filters/whitespace.py,sha256=8eWqZxd4UC4zlFGW6iyY6f-2uuT8pOCSALc3IZt7_t4,1214
500
+ pip/_vendor/html5lib/html5parser.py,sha256=anr-aXre_ImfrkQ35c_rftKXxC80vJCREKe06Tq15HA,117186
501
+ pip/_vendor/html5lib/serializer.py,sha256=_PpvcZF07cwE7xr9uKkZqh5f4UEaI8ltCU2xPJzaTpk,15759
502
+ pip/_vendor/html5lib/treeadapters/__init__.py,sha256=A0rY5gXIe4bJOiSGRO_j_tFhngRBO8QZPzPtPw5dFzo,679
503
+ pip/_vendor/html5lib/treeadapters/__pycache__/__init__.cpython-310.pyc,,
504
+ pip/_vendor/html5lib/treeadapters/__pycache__/genshi.cpython-310.pyc,,
505
+ pip/_vendor/html5lib/treeadapters/__pycache__/sax.cpython-310.pyc,,
506
+ pip/_vendor/html5lib/treeadapters/genshi.py,sha256=CH27pAsDKmu4ZGkAUrwty7u0KauGLCZRLPMzaO3M5vo,1715
507
+ pip/_vendor/html5lib/treeadapters/sax.py,sha256=BKS8woQTnKiqeffHsxChUqL4q2ZR_wb5fc9MJ3zQC8s,1776
508
+ pip/_vendor/html5lib/treebuilders/__init__.py,sha256=AysSJyvPfikCMMsTVvaxwkgDieELD5dfR8FJIAuq7hY,3592
509
+ pip/_vendor/html5lib/treebuilders/__pycache__/__init__.cpython-310.pyc,,
510
+ pip/_vendor/html5lib/treebuilders/__pycache__/base.cpython-310.pyc,,
511
+ pip/_vendor/html5lib/treebuilders/__pycache__/dom.cpython-310.pyc,,
512
+ pip/_vendor/html5lib/treebuilders/__pycache__/etree.cpython-310.pyc,,
513
+ pip/_vendor/html5lib/treebuilders/__pycache__/etree_lxml.cpython-310.pyc,,
514
+ pip/_vendor/html5lib/treebuilders/base.py,sha256=z-o51vt9r_l2IDG5IioTOKGzZne4Fy3_Fc-7ztrOh4I,14565
515
+ pip/_vendor/html5lib/treebuilders/dom.py,sha256=22whb0C71zXIsai5mamg6qzBEiigcBIvaDy4Asw3at0,8925
516
+ pip/_vendor/html5lib/treebuilders/etree.py,sha256=w5ZFpKk6bAxnrwD2_BrF5EVC7vzz0L3LMi9Sxrbc_8w,12836
517
+ pip/_vendor/html5lib/treebuilders/etree_lxml.py,sha256=9gqDjs-IxsPhBYa5cpvv2FZ1KZlG83Giusy2lFmvIkE,14766
518
+ pip/_vendor/html5lib/treewalkers/__init__.py,sha256=OBPtc1TU5mGyy18QDMxKEyYEz0wxFUUNj5v0-XgmYhY,5719
519
+ pip/_vendor/html5lib/treewalkers/__pycache__/__init__.cpython-310.pyc,,
520
+ pip/_vendor/html5lib/treewalkers/__pycache__/base.cpython-310.pyc,,
521
+ pip/_vendor/html5lib/treewalkers/__pycache__/dom.cpython-310.pyc,,
522
+ pip/_vendor/html5lib/treewalkers/__pycache__/etree.cpython-310.pyc,,
523
+ pip/_vendor/html5lib/treewalkers/__pycache__/etree_lxml.cpython-310.pyc,,
524
+ pip/_vendor/html5lib/treewalkers/__pycache__/genshi.cpython-310.pyc,,
525
+ pip/_vendor/html5lib/treewalkers/base.py,sha256=ouiOsuSzvI0KgzdWP8PlxIaSNs9falhbiinAEc_UIJY,7476
526
+ pip/_vendor/html5lib/treewalkers/dom.py,sha256=EHyFR8D8lYNnyDU9lx_IKigVJRyecUGua0mOi7HBukc,1413
527
+ pip/_vendor/html5lib/treewalkers/etree.py,sha256=xo1L5m9VtkfpFJK0pFmkLVajhqYYVisVZn3k9kYpPkI,4551
528
+ pip/_vendor/html5lib/treewalkers/etree_lxml.py,sha256=_b0LAVWLcVu9WaU_-w3D8f0IRSpCbjf667V-3NRdhTw,6357
529
+ pip/_vendor/html5lib/treewalkers/genshi.py,sha256=4D2PECZ5n3ZN3qu3jMl9yY7B81jnQApBQSVlfaIuYbA,2309
530
+ pip/_vendor/idna/__init__.py,sha256=KJQN1eQBr8iIK5SKrJ47lXvxG0BJ7Lm38W4zT0v_8lk,849
531
+ pip/_vendor/idna/__pycache__/__init__.cpython-310.pyc,,
532
+ pip/_vendor/idna/__pycache__/codec.cpython-310.pyc,,
533
+ pip/_vendor/idna/__pycache__/compat.cpython-310.pyc,,
534
+ pip/_vendor/idna/__pycache__/core.cpython-310.pyc,,
535
+ pip/_vendor/idna/__pycache__/idnadata.cpython-310.pyc,,
536
+ pip/_vendor/idna/__pycache__/intranges.cpython-310.pyc,,
537
+ pip/_vendor/idna/__pycache__/package_data.cpython-310.pyc,,
538
+ pip/_vendor/idna/__pycache__/uts46data.cpython-310.pyc,,
539
+ pip/_vendor/idna/codec.py,sha256=6ly5odKfqrytKT9_7UrlGklHnf1DSK2r9C6cSM4sa28,3374
540
+ pip/_vendor/idna/compat.py,sha256=0_sOEUMT4CVw9doD3vyRhX80X19PwqFoUBs7gWsFME4,321
541
+ pip/_vendor/idna/core.py,sha256=pNlI-XmwJ8ZseGTa0PLGxI6SOyaaAMwgfWvi7zwVNpE,12658
542
+ pip/_vendor/idna/idnadata.py,sha256=TmP9_NBUtQ0pCZDjJxCjYtflgfroWC-LA9ueaNNtT90,78019
543
+ pip/_vendor/idna/intranges.py,sha256=YBr4fRYuWH7kTKS2tXlFjM24ZF1Pdvcir-aywniInqg,1881
544
+ pip/_vendor/idna/package_data.py,sha256=szxQhV0ZD0nKJ84Kuobw3l8q4_KeCyXjFRdpwIpKZmw,21
545
+ pip/_vendor/idna/uts46data.py,sha256=o-D7V-a0fOLZNd7tvxof6MYfUd0TBZzE2bLR5XO67xU,204400
546
+ pip/_vendor/msgpack/__init__.py,sha256=2gJwcsTIaAtCM0GMi2rU-_Y6kILeeQuqRkrQ22jSANc,1118
547
+ pip/_vendor/msgpack/__pycache__/__init__.cpython-310.pyc,,
548
+ pip/_vendor/msgpack/__pycache__/_version.cpython-310.pyc,,
549
+ pip/_vendor/msgpack/__pycache__/exceptions.cpython-310.pyc,,
550
+ pip/_vendor/msgpack/__pycache__/ext.cpython-310.pyc,,
551
+ pip/_vendor/msgpack/__pycache__/fallback.cpython-310.pyc,,
552
+ pip/_vendor/msgpack/_version.py,sha256=JpTcnRd3YUioA24NDtDZbLW0Nhl2yA-N1Rq2lLDBB-g,20
553
+ pip/_vendor/msgpack/exceptions.py,sha256=dCTWei8dpkrMsQDcjQk74ATl9HsIBH0ybt8zOPNqMYc,1081
554
+ pip/_vendor/msgpack/ext.py,sha256=4l356Y4sVEcvCla2dh_cL57vh4GMhZfa3kuWHFHYz6A,6088
555
+ pip/_vendor/msgpack/fallback.py,sha256=L5jriXysURbf6rPbbHbvXgvoFrKZiryIBmujMTcrf3A,34475
556
+ pip/_vendor/packaging/__about__.py,sha256=ugASIO2w1oUyH8_COqQ2X_s0rDhjbhQC3yJocD03h2c,661
557
+ pip/_vendor/packaging/__init__.py,sha256=b9Kk5MF7KxhhLgcDmiUWukN-LatWFxPdNug0joPhHSk,497
558
+ pip/_vendor/packaging/__pycache__/__about__.cpython-310.pyc,,
559
+ pip/_vendor/packaging/__pycache__/__init__.cpython-310.pyc,,
560
+ pip/_vendor/packaging/__pycache__/_manylinux.cpython-310.pyc,,
561
+ pip/_vendor/packaging/__pycache__/_musllinux.cpython-310.pyc,,
562
+ pip/_vendor/packaging/__pycache__/_structures.cpython-310.pyc,,
563
+ pip/_vendor/packaging/__pycache__/markers.cpython-310.pyc,,
564
+ pip/_vendor/packaging/__pycache__/requirements.cpython-310.pyc,,
565
+ pip/_vendor/packaging/__pycache__/specifiers.cpython-310.pyc,,
566
+ pip/_vendor/packaging/__pycache__/tags.cpython-310.pyc,,
567
+ pip/_vendor/packaging/__pycache__/utils.cpython-310.pyc,,
568
+ pip/_vendor/packaging/__pycache__/version.cpython-310.pyc,,
569
+ pip/_vendor/packaging/_manylinux.py,sha256=XcbiXB-qcjv3bcohp6N98TMpOP4_j3m-iOA8ptK2GWY,11488
570
+ pip/_vendor/packaging/_musllinux.py,sha256=_KGgY_qc7vhMGpoqss25n2hiLCNKRtvz9mCrS7gkqyc,4378
571
+ pip/_vendor/packaging/_structures.py,sha256=q3eVNmbWJGG_S0Dit_S3Ao8qQqz_5PYTXFAKBZe5yr4,1431
572
+ pip/_vendor/packaging/markers.py,sha256=AJBOcY8Oq0kYc570KuuPTkvuqjAlhufaE2c9sCUbm64,8487
573
+ pip/_vendor/packaging/requirements.py,sha256=NtDlPBtojpn1IUC85iMjPNsUmufjpSlwnNA-Xb4m5NA,4676
574
+ pip/_vendor/packaging/specifiers.py,sha256=LRQ0kFsHrl5qfcFNEEJrIFYsnIHQUJXY9fIsakTrrqE,30110
575
+ pip/_vendor/packaging/tags.py,sha256=lmsnGNiJ8C4D_Pf9PbM0qgbZvD9kmB9lpZBQUZa3R_Y,15699
576
+ pip/_vendor/packaging/utils.py,sha256=dJjeat3BS-TYn1RrUFVwufUMasbtzLfYRoy_HXENeFQ,4200
577
+ pip/_vendor/packaging/version.py,sha256=_fLRNrFrxYcHVfyo8vk9j8s6JM8N_xsSxVFr6RJyco8,14665
578
+ pip/_vendor/pep517/__init__.py,sha256=Y1bATL2qbFNN6M_DQa4yyrwqjpIiL-j9T6kBmR0DS14,130
579
+ pip/_vendor/pep517/__pycache__/__init__.cpython-310.pyc,,
580
+ pip/_vendor/pep517/__pycache__/build.cpython-310.pyc,,
581
+ pip/_vendor/pep517/__pycache__/check.cpython-310.pyc,,
582
+ pip/_vendor/pep517/__pycache__/colorlog.cpython-310.pyc,,
583
+ pip/_vendor/pep517/__pycache__/compat.cpython-310.pyc,,
584
+ pip/_vendor/pep517/__pycache__/dirtools.cpython-310.pyc,,
585
+ pip/_vendor/pep517/__pycache__/envbuild.cpython-310.pyc,,
586
+ pip/_vendor/pep517/__pycache__/meta.cpython-310.pyc,,
587
+ pip/_vendor/pep517/__pycache__/wrappers.cpython-310.pyc,,
588
+ pip/_vendor/pep517/build.py,sha256=2bar6EdjwIz2Dlfy94qdxn3oA9mVnnny40mfoT5f-qI,3457
589
+ pip/_vendor/pep517/check.py,sha256=bCORq1WrHjhpTONa-zpAqG0EB9rHNuhO1ORu6DsDuL8,6084
590
+ pip/_vendor/pep517/colorlog.py,sha256=Tk9AuYm_cLF3BKTBoSTJt9bRryn0aFojIQOwbfVUTxQ,4098
591
+ pip/_vendor/pep517/compat.py,sha256=NmLImE5oiDT3gbEhJ4w7xeoMFcpAPrGu_NltBytSJUY,1253
592
+ pip/_vendor/pep517/dirtools.py,sha256=2mkAkAL0mRz_elYFjRKuekTJVipH1zTn4tbf1EDev84,1129
593
+ pip/_vendor/pep517/envbuild.py,sha256=zFde--rmzjXMLXcm7SA_3hDtgk5VCTA8hjpk88RbF6E,6100
594
+ pip/_vendor/pep517/in_process/__init__.py,sha256=MyWoAi8JHdcBv7yXuWpUSVADbx6LSB9rZh7kTIgdA8Y,563
595
+ pip/_vendor/pep517/in_process/__pycache__/__init__.cpython-310.pyc,,
596
+ pip/_vendor/pep517/in_process/__pycache__/_in_process.cpython-310.pyc,,
597
+ pip/_vendor/pep517/in_process/_in_process.py,sha256=D3waguyNSGcwosociD5USfcycYr2RCzCjYtxX5UHQmQ,11201
598
+ pip/_vendor/pep517/meta.py,sha256=8mnM5lDnT4zXQpBTliJbRGfesH7iioHwozbDxALPS9Y,2463
599
+ pip/_vendor/pep517/wrappers.py,sha256=impq7Cz_LL1iDF1iiOzYWB4MaEu6O6Gps7TJ5qsJz1Q,13429
600
+ pip/_vendor/pkg_resources/__init__.py,sha256=NnpQ3g6BCHzpMgOR_OLBmYtniY4oOzdKpwqghfq_6ug,108287
601
+ pip/_vendor/pkg_resources/__pycache__/__init__.cpython-310.pyc,,
602
+ pip/_vendor/pkg_resources/__pycache__/py31compat.cpython-310.pyc,,
603
+ pip/_vendor/pkg_resources/py31compat.py,sha256=CRk8fkiPRDLsbi5pZcKsHI__Pbmh_94L8mr9Qy9Ab2U,562
604
+ pip/_vendor/platformdirs/__init__.py,sha256=Aizpxewwd4nY63Gqw-Od1Rso9Ah4bSoc6rkx-GBRu2Y,12676
605
+ pip/_vendor/platformdirs/__main__.py,sha256=ZmsnTxEOxtTvwa-Y_Vfab_JN3X4XCVeN8X0yyy9-qnc,1176
606
+ pip/_vendor/platformdirs/__pycache__/__init__.cpython-310.pyc,,
607
+ pip/_vendor/platformdirs/__pycache__/__main__.cpython-310.pyc,,
608
+ pip/_vendor/platformdirs/__pycache__/android.cpython-310.pyc,,
609
+ pip/_vendor/platformdirs/__pycache__/api.cpython-310.pyc,,
610
+ pip/_vendor/platformdirs/__pycache__/macos.cpython-310.pyc,,
611
+ pip/_vendor/platformdirs/__pycache__/unix.cpython-310.pyc,,
612
+ pip/_vendor/platformdirs/__pycache__/version.cpython-310.pyc,,
613
+ pip/_vendor/platformdirs/__pycache__/windows.cpython-310.pyc,,
614
+ pip/_vendor/platformdirs/android.py,sha256=xhlD4NmrKCARe5lgnpBGYo4lOYxEOBOByNDNYy91gEE,4012
615
+ pip/_vendor/platformdirs/api.py,sha256=MXKHXOL3eh_-trSok-JUTjAR_zjmmKF3rjREVABjP8s,4910
616
+ pip/_vendor/platformdirs/macos.py,sha256=-3UXQewbT0yMhMdkzRXfXGAntmLIH7Qt4a9Hlf8I5_Y,2655
617
+ pip/_vendor/platformdirs/unix.py,sha256=b4aVYTz0qZ50HntwOXo8r6tp82jAa3qTjxw-WlnC2yc,6910
618
+ pip/_vendor/platformdirs/version.py,sha256=bXzLJCe23FNQRQrf7ZRWKejxWnct_wft7dxdkMGT33E,80
619
+ pip/_vendor/platformdirs/windows.py,sha256=ISruopR5UGBePC0BxCxXevkZYfjJsIZc49YWU5iYfQ4,6439
620
+ pip/_vendor/progress/__init__.py,sha256=1HejNZtv2ouUNQeStUDAtZrtwkz_3FmYKQ476hJ7zOs,5294
621
+ pip/_vendor/progress/__pycache__/__init__.cpython-310.pyc,,
622
+ pip/_vendor/progress/__pycache__/bar.cpython-310.pyc,,
623
+ pip/_vendor/progress/__pycache__/colors.cpython-310.pyc,,
624
+ pip/_vendor/progress/__pycache__/counter.cpython-310.pyc,,
625
+ pip/_vendor/progress/__pycache__/spinner.cpython-310.pyc,,
626
+ pip/_vendor/progress/bar.py,sha256=GbedY0oZ-Q1duXjmvVLO0tSf-uTSH7hJ3zzyI91Esws,2942
627
+ pip/_vendor/progress/colors.py,sha256=cCYXQnYFYVmQKKmYEbQ_lj6SPSFzdw4FN98F2x2kR-U,2655
628
+ pip/_vendor/progress/counter.py,sha256=zYt9DWH0_05s8Q9TrJwHVud-WwsyyaR3PwYtk5hxwwQ,1613
629
+ pip/_vendor/progress/spinner.py,sha256=u5ElzW94XEiLGH-aAlr54VJtKfeK745xr6UfGvvflzU,1461
630
+ pip/_vendor/pygments/__init__.py,sha256=CAmA9UthykwxvtutUcH0IxqtiyQcSg6CmYdM-jKlcRY,3002
631
+ pip/_vendor/pygments/__main__.py,sha256=X7rGLMUC54EXgO14FZ9goKXZDmhPzKXTsUglmb_McIU,353
632
+ pip/_vendor/pygments/__pycache__/__init__.cpython-310.pyc,,
633
+ pip/_vendor/pygments/__pycache__/__main__.cpython-310.pyc,,
634
+ pip/_vendor/pygments/__pycache__/cmdline.cpython-310.pyc,,
635
+ pip/_vendor/pygments/__pycache__/console.cpython-310.pyc,,
636
+ pip/_vendor/pygments/__pycache__/filter.cpython-310.pyc,,
637
+ pip/_vendor/pygments/__pycache__/formatter.cpython-310.pyc,,
638
+ pip/_vendor/pygments/__pycache__/lexer.cpython-310.pyc,,
639
+ pip/_vendor/pygments/__pycache__/modeline.cpython-310.pyc,,
640
+ pip/_vendor/pygments/__pycache__/plugin.cpython-310.pyc,,
641
+ pip/_vendor/pygments/__pycache__/regexopt.cpython-310.pyc,,
642
+ pip/_vendor/pygments/__pycache__/scanner.cpython-310.pyc,,
643
+ pip/_vendor/pygments/__pycache__/sphinxext.cpython-310.pyc,,
644
+ pip/_vendor/pygments/__pycache__/style.cpython-310.pyc,,
645
+ pip/_vendor/pygments/__pycache__/token.cpython-310.pyc,,
646
+ pip/_vendor/pygments/__pycache__/unistring.cpython-310.pyc,,
647
+ pip/_vendor/pygments/__pycache__/util.cpython-310.pyc,,
648
+ pip/_vendor/pygments/cmdline.py,sha256=XpsyWgErcSqHC7rXiYKLF3Y61Uy8SR2DNQDDhZGuezg,23408
649
+ pip/_vendor/pygments/console.py,sha256=QZXBUAkyl4dPLQ1e6XHjQu3mmXBWvuGQwsQT2q1mtCY,1697
650
+ pip/_vendor/pygments/filter.py,sha256=35iMZiB1rcuogxokm92kViB2DPXPp_wWoxWuMmwvvzY,1938
651
+ pip/_vendor/pygments/filters/__init__.py,sha256=-veOimzCyYGEARru2Dfo6ofSYcZ8tGsIVuMprtaZQ24,40292
652
+ pip/_vendor/pygments/filters/__pycache__/__init__.cpython-310.pyc,,
653
+ pip/_vendor/pygments/formatter.py,sha256=zSBbX2U_OOriy7SJvSTK6OAxjuXtROWxQlNpJEJZjBA,2917
654
+ pip/_vendor/pygments/formatters/__init__.py,sha256=fjkYDy5-F998XczKi0ymHFayr5ObIRLHF8cgp9k8kpA,5119
655
+ pip/_vendor/pygments/formatters/__pycache__/__init__.cpython-310.pyc,,
656
+ pip/_vendor/pygments/formatters/__pycache__/_mapping.cpython-310.pyc,,
657
+ pip/_vendor/pygments/formatters/__pycache__/bbcode.cpython-310.pyc,,
658
+ pip/_vendor/pygments/formatters/__pycache__/groff.cpython-310.pyc,,
659
+ pip/_vendor/pygments/formatters/__pycache__/html.cpython-310.pyc,,
660
+ pip/_vendor/pygments/formatters/__pycache__/img.cpython-310.pyc,,
661
+ pip/_vendor/pygments/formatters/__pycache__/irc.cpython-310.pyc,,
662
+ pip/_vendor/pygments/formatters/__pycache__/latex.cpython-310.pyc,,
663
+ pip/_vendor/pygments/formatters/__pycache__/other.cpython-310.pyc,,
664
+ pip/_vendor/pygments/formatters/__pycache__/pangomarkup.cpython-310.pyc,,
665
+ pip/_vendor/pygments/formatters/__pycache__/rtf.cpython-310.pyc,,
666
+ pip/_vendor/pygments/formatters/__pycache__/svg.cpython-310.pyc,,
667
+ pip/_vendor/pygments/formatters/__pycache__/terminal.cpython-310.pyc,,
668
+ pip/_vendor/pygments/formatters/__pycache__/terminal256.cpython-310.pyc,,
669
+ pip/_vendor/pygments/formatters/_mapping.py,sha256=3A1rYSjYN9MLduCFWy2_mYhllPVpwlw55anRYnPXX8w,6516
670
+ pip/_vendor/pygments/formatters/bbcode.py,sha256=cSKMOioUnE4TzvCCsK4IbJ6G78W07ZwHtkz4V1Wte0U,3314
671
+ pip/_vendor/pygments/formatters/groff.py,sha256=ULgMKvGeLswX0KZn3IBp0p0U3rruiSHBtpl6O5qbqLs,5005
672
+ pip/_vendor/pygments/formatters/html.py,sha256=0jM7Jc4xA4tsjmPq35uklm_En_OVdcNb0__SEXp2pDQ,35330
673
+ pip/_vendor/pygments/formatters/img.py,sha256=r4iag_jCfyv_LhIt-1fRDeVEEoAfVJzkD9nZChIwiS8,21819
674
+ pip/_vendor/pygments/formatters/irc.py,sha256=gi_IeIZeNaTfTMtvseLigZdS6lNicN7r7O7rnI6myo0,5871
675
+ pip/_vendor/pygments/formatters/latex.py,sha256=qZUerrHt2Nn2aB4gJcdqj99qBkIxl_1v1ukYsf230Gk,18930
676
+ pip/_vendor/pygments/formatters/other.py,sha256=Q01LtkqPZ8m_EYdgMVzXPUGjHoL00lXI3By97wzytYU,5073
677
+ pip/_vendor/pygments/formatters/pangomarkup.py,sha256=ZpjALTSuGFwviJd5kOYwr-1NgqxCX3XRJrjXC7x1UbQ,2212
678
+ pip/_vendor/pygments/formatters/rtf.py,sha256=qh7-z_wbUsTY6z7fZUGrYECYBlWB0wEdBwIZVEVybL0,5014
679
+ pip/_vendor/pygments/formatters/svg.py,sha256=T7Jj004I3JUPOr48aAhQ368K2qWCciUyMQ2tdU-LB-4,7335
680
+ pip/_vendor/pygments/formatters/terminal.py,sha256=cRD5hitINOkYlGZo9ma252vpJYPSGNgLivrsm6zGyec,4674
681
+ pip/_vendor/pygments/formatters/terminal256.py,sha256=Bvz9zZL3UWc94TDm1GhKMI4x0BTit0XplhyRL0zmtkw,11753
682
+ pip/_vendor/pygments/lexer.py,sha256=ECXWlEsbRnKs_njozZns6BGQ4riTMzct_BzAr3zV6dY,31937
683
+ pip/_vendor/pygments/lexers/__init__.py,sha256=6Ds0GVBP3jrIU02wmjRdpoL4eFGhwT2IVD1zf3cV5_Y,11307
684
+ pip/_vendor/pygments/lexers/__pycache__/__init__.cpython-310.pyc,,
685
+ pip/_vendor/pygments/lexers/__pycache__/_mapping.cpython-310.pyc,,
686
+ pip/_vendor/pygments/lexers/__pycache__/python.cpython-310.pyc,,
687
+ pip/_vendor/pygments/lexers/_mapping.py,sha256=jAxmvh5wvNkD-p3Fh6E7hY_B0sGbcxWRfseT6iq7ex4,70032
688
+ pip/_vendor/pygments/lexers/python.py,sha256=LXnk43Lcngqn9xj6eRqdk2f73oF4kHZWiwgHMM_RlVM,52776
689
+ pip/_vendor/pygments/modeline.py,sha256=37fen3cf1moCz4vMVJqX41eAQCmj8pzUchikgPcHp-U,986
690
+ pip/_vendor/pygments/plugin.py,sha256=zGSig3S7QX-3o6RDxd4_Uvice_t25l_BN9aQQ9k8vmU,1727
691
+ pip/_vendor/pygments/regexopt.py,sha256=mj8Fgu3sT0d5PZwRwDLexEvVOQbuHeosubQnqVwgiqs,3072
692
+ pip/_vendor/pygments/scanner.py,sha256=nGoHy-Npk2ylUd4bws_CJN1hK785Xqo8e0teRmNX2jo,3091
693
+ pip/_vendor/pygments/sphinxext.py,sha256=FZ2puvLe2Bztqtj6UJvQd7D8TvtOZ1GsfRJObvH59tE,4630
694
+ pip/_vendor/pygments/style.py,sha256=lGyan5bU42q1kGMfFqafwL3g1j5EurTvfkv8vdP7NzQ,6257
695
+ pip/_vendor/pygments/styles/__init__.py,sha256=Qx2zq6ufbDNE2cTp51M-s9zW-sDE-KLIqFw31qr3Bhg,3252
696
+ pip/_vendor/pygments/styles/__pycache__/__init__.cpython-310.pyc,,
697
+ pip/_vendor/pygments/token.py,sha256=lNPgeaQTzu2DEUi6n_lxAIU7uy4DVj8LMI3nSVnTjks,6143
698
+ pip/_vendor/pygments/unistring.py,sha256=Xs0FzOzE0l0iWRoTlcgi-Q_kAMdF5Gt5FL_goGKJc98,63188
699
+ pip/_vendor/pygments/util.py,sha256=s9n8BQXIxG3lIwCPWv5-ci8yhaqq5JbEVK9v8Z-8_3I,9123
700
+ pip/_vendor/pyparsing/__init__.py,sha256=jXheGTFT1b6r_4WxuOE0uVUqiouLJ3WHzOScpLieRgQ,9107
701
+ pip/_vendor/pyparsing/__pycache__/__init__.cpython-310.pyc,,
702
+ pip/_vendor/pyparsing/__pycache__/actions.cpython-310.pyc,,
703
+ pip/_vendor/pyparsing/__pycache__/common.cpython-310.pyc,,
704
+ pip/_vendor/pyparsing/__pycache__/core.cpython-310.pyc,,
705
+ pip/_vendor/pyparsing/__pycache__/exceptions.cpython-310.pyc,,
706
+ pip/_vendor/pyparsing/__pycache__/helpers.cpython-310.pyc,,
707
+ pip/_vendor/pyparsing/__pycache__/results.cpython-310.pyc,,
708
+ pip/_vendor/pyparsing/__pycache__/testing.cpython-310.pyc,,
709
+ pip/_vendor/pyparsing/__pycache__/unicode.cpython-310.pyc,,
710
+ pip/_vendor/pyparsing/__pycache__/util.cpython-310.pyc,,
711
+ pip/_vendor/pyparsing/actions.py,sha256=60v7mETOBzc01YPH_qQD5isavgcSJpAfIKpzgjM3vaU,6429
712
+ pip/_vendor/pyparsing/common.py,sha256=lFL97ooIeR75CmW5hjURZqwDCTgruqltcTCZ-ulLO2Q,12936
713
+ pip/_vendor/pyparsing/core.py,sha256=GtQsD06HlwKPc7M8K8hyOuOW-cRnd87AxAHq-ad5lEk,212248
714
+ pip/_vendor/pyparsing/diagram/__init__.py,sha256=h0gsUwmo5N3shgvfXVQTtqvTpUAv-ZdQjSQ6IUJmsxY,22165
715
+ pip/_vendor/pyparsing/diagram/__pycache__/__init__.cpython-310.pyc,,
716
+ pip/_vendor/pyparsing/exceptions.py,sha256=H4D9gqMavqmAFSsdrU_J6bO-jA-T-A7yvtXWZpooIUA,9030
717
+ pip/_vendor/pyparsing/helpers.py,sha256=kqpIZFG-y0fQ3g_TmloYllo9we6YCYiewZMXIK0y5wc,38299
718
+ pip/_vendor/pyparsing/results.py,sha256=4D-oURF1cLeL7k0d3zMqUuWH_gTjop_OrZwik9O0HXU,25339
719
+ pip/_vendor/pyparsing/testing.py,sha256=szs8AKZREZMhL0y0vsMfaTVAnpqPHetg6VKJBNmc4QY,13388
720
+ pip/_vendor/pyparsing/unicode.py,sha256=IR-ioeGY29cZ49tG8Ts7ITPWWNP5G2DcZs58oa8zn44,10381
721
+ pip/_vendor/pyparsing/util.py,sha256=kq772O5YSeXOSdP-M31EWpbH_ayj7BMHImBYo9xPD5M,6805
722
+ pip/_vendor/requests/__init__.py,sha256=6IUFQM6K9V2NIu4fe4LtUsN21-TFbw_w3EfPpdUN-qc,5130
723
+ pip/_vendor/requests/__pycache__/__init__.cpython-310.pyc,,
724
+ pip/_vendor/requests/__pycache__/__version__.cpython-310.pyc,,
725
+ pip/_vendor/requests/__pycache__/_internal_utils.cpython-310.pyc,,
726
+ pip/_vendor/requests/__pycache__/adapters.cpython-310.pyc,,
727
+ pip/_vendor/requests/__pycache__/api.cpython-310.pyc,,
728
+ pip/_vendor/requests/__pycache__/auth.cpython-310.pyc,,
729
+ pip/_vendor/requests/__pycache__/certs.cpython-310.pyc,,
730
+ pip/_vendor/requests/__pycache__/compat.cpython-310.pyc,,
731
+ pip/_vendor/requests/__pycache__/cookies.cpython-310.pyc,,
732
+ pip/_vendor/requests/__pycache__/exceptions.cpython-310.pyc,,
733
+ pip/_vendor/requests/__pycache__/help.cpython-310.pyc,,
734
+ pip/_vendor/requests/__pycache__/hooks.cpython-310.pyc,,
735
+ pip/_vendor/requests/__pycache__/models.cpython-310.pyc,,
736
+ pip/_vendor/requests/__pycache__/packages.cpython-310.pyc,,
737
+ pip/_vendor/requests/__pycache__/sessions.cpython-310.pyc,,
738
+ pip/_vendor/requests/__pycache__/status_codes.cpython-310.pyc,,
739
+ pip/_vendor/requests/__pycache__/structures.cpython-310.pyc,,
740
+ pip/_vendor/requests/__pycache__/utils.cpython-310.pyc,,
741
+ pip/_vendor/requests/__version__.py,sha256=q8miOQaomOv3S74lK4eQs1zZ5jwcnOusyEU-M2idhts,441
742
+ pip/_vendor/requests/_internal_utils.py,sha256=Zx3PnEUccyfsB-ie11nZVAW8qClJy0gx1qNME7rgT18,1096
743
+ pip/_vendor/requests/adapters.py,sha256=WazYJQ_b2LHhNDb_y0hscNlWVsSe5ca5I3pymPrer5w,21861
744
+ pip/_vendor/requests/api.py,sha256=hjuoP79IAEmX6Dysrw8t032cLfwLHxbI_wM4gC5G9t0,6402
745
+ pip/_vendor/requests/auth.py,sha256=OMoJIVKyRLy9THr91y8rxysZuclwPB-K1Xg1zBomUhQ,10207
746
+ pip/_vendor/requests/certs.py,sha256=nXRVq9DtGmv_1AYbwjTu9UrgAcdJv05ZvkNeaoLOZxY,465
747
+ pip/_vendor/requests/compat.py,sha256=N1281mkcTluMjKqCSLf88LR6HNOygEhS1TbR9LLsoVY,2114
748
+ pip/_vendor/requests/cookies.py,sha256=Y-bKX6TvW3FnYlE6Au0SXtVVWcaNdFvuAwQxw-G0iTI,18430
749
+ pip/_vendor/requests/exceptions.py,sha256=VcpBXOL-9JYhNbK8OZxCIImBgpQSXJlUelDPf1f-pmM,3446
750
+ pip/_vendor/requests/help.py,sha256=dyhe3lcmHXnFCzDiZVjcGmVvvO_jtsfAm-AC542ndw8,3972
751
+ pip/_vendor/requests/hooks.py,sha256=QReGyy0bRcr5rkwCuObNakbYsc7EkiKeBwG4qHekr2Q,757
752
+ pip/_vendor/requests/models.py,sha256=7pzscX_47qxx7-zEaBWGxMoB33Vdf6HLoUKZh1ktEvM,35116
753
+ pip/_vendor/requests/packages.py,sha256=njJmVifY4aSctuW3PP5EFRCxjEwMRDO6J_feG2dKWsI,695
754
+ pip/_vendor/requests/sessions.py,sha256=HiFx6LQ-pINGxzmdfKbU3C5o_-NF1OViwFoWKjSILG4,30028
755
+ pip/_vendor/requests/status_codes.py,sha256=gT79Pbs_cQjBgp-fvrUgg1dn2DQO32bDj4TInjnMPSc,4188
756
+ pip/_vendor/requests/structures.py,sha256=msAtr9mq1JxHd-JRyiILfdFlpbJwvvFuP3rfUQT_QxE,3005
757
+ pip/_vendor/requests/utils.py,sha256=4-8IEAnpoRvepu6y5qk1aTI_NkfUqO4yxProY71MkZQ,33030
758
+ pip/_vendor/resolvelib/__init__.py,sha256=UL-B2BDI0_TRIqkfGwLHKLxY-LjBlomz7941wDqzB1I,537
759
+ pip/_vendor/resolvelib/__pycache__/__init__.cpython-310.pyc,,
760
+ pip/_vendor/resolvelib/__pycache__/providers.cpython-310.pyc,,
761
+ pip/_vendor/resolvelib/__pycache__/reporters.cpython-310.pyc,,
762
+ pip/_vendor/resolvelib/__pycache__/resolvers.cpython-310.pyc,,
763
+ pip/_vendor/resolvelib/__pycache__/structs.cpython-310.pyc,,
764
+ pip/_vendor/resolvelib/compat/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
765
+ pip/_vendor/resolvelib/compat/__pycache__/__init__.cpython-310.pyc,,
766
+ pip/_vendor/resolvelib/compat/__pycache__/collections_abc.cpython-310.pyc,,
767
+ pip/_vendor/resolvelib/compat/collections_abc.py,sha256=uy8xUZ-NDEw916tugUXm8HgwCGiMO0f-RcdnpkfXfOs,156
768
+ pip/_vendor/resolvelib/providers.py,sha256=roVmFBItQJ0TkhNua65h8LdNny7rmeqVEXZu90QiP4o,5872
769
+ pip/_vendor/resolvelib/reporters.py,sha256=fW91NKf-lK8XN7i6Yd_rczL5QeOT3sc6AKhpaTEnP3E,1583
770
+ pip/_vendor/resolvelib/resolvers.py,sha256=2wYzVGBGerbmcIpH8cFmgSKgLSETz8jmwBMGjCBMHG4,17592
771
+ pip/_vendor/resolvelib/structs.py,sha256=IVIYof6sA_N4ZEiE1C1UhzTX495brCNnyCdgq6CYq28,4794
772
+ pip/_vendor/rich/__init__.py,sha256=wF1th4JGBCVC02xfaw8j6P2MrFcJaQJL72scKtEmDYQ,5804
773
+ pip/_vendor/rich/__main__.py,sha256=vd1PP-o7_1un-ThdgMU9LHV-D8z56yz_-fryczn38eE,8810
774
+ pip/_vendor/rich/__pycache__/__init__.cpython-310.pyc,,
775
+ pip/_vendor/rich/__pycache__/__main__.cpython-310.pyc,,
776
+ pip/_vendor/rich/__pycache__/_cell_widths.cpython-310.pyc,,
777
+ pip/_vendor/rich/__pycache__/_emoji_codes.cpython-310.pyc,,
778
+ pip/_vendor/rich/__pycache__/_emoji_replace.cpython-310.pyc,,
779
+ pip/_vendor/rich/__pycache__/_extension.cpython-310.pyc,,
780
+ pip/_vendor/rich/__pycache__/_inspect.cpython-310.pyc,,
781
+ pip/_vendor/rich/__pycache__/_log_render.cpython-310.pyc,,
782
+ pip/_vendor/rich/__pycache__/_loop.cpython-310.pyc,,
783
+ pip/_vendor/rich/__pycache__/_lru_cache.cpython-310.pyc,,
784
+ pip/_vendor/rich/__pycache__/_palettes.cpython-310.pyc,,
785
+ pip/_vendor/rich/__pycache__/_pick.cpython-310.pyc,,
786
+ pip/_vendor/rich/__pycache__/_ratio.cpython-310.pyc,,
787
+ pip/_vendor/rich/__pycache__/_spinners.cpython-310.pyc,,
788
+ pip/_vendor/rich/__pycache__/_stack.cpython-310.pyc,,
789
+ pip/_vendor/rich/__pycache__/_timer.cpython-310.pyc,,
790
+ pip/_vendor/rich/__pycache__/_windows.cpython-310.pyc,,
791
+ pip/_vendor/rich/__pycache__/_wrap.cpython-310.pyc,,
792
+ pip/_vendor/rich/__pycache__/abc.cpython-310.pyc,,
793
+ pip/_vendor/rich/__pycache__/align.cpython-310.pyc,,
794
+ pip/_vendor/rich/__pycache__/ansi.cpython-310.pyc,,
795
+ pip/_vendor/rich/__pycache__/bar.cpython-310.pyc,,
796
+ pip/_vendor/rich/__pycache__/box.cpython-310.pyc,,
797
+ pip/_vendor/rich/__pycache__/cells.cpython-310.pyc,,
798
+ pip/_vendor/rich/__pycache__/color.cpython-310.pyc,,
799
+ pip/_vendor/rich/__pycache__/color_triplet.cpython-310.pyc,,
800
+ pip/_vendor/rich/__pycache__/columns.cpython-310.pyc,,
801
+ pip/_vendor/rich/__pycache__/console.cpython-310.pyc,,
802
+ pip/_vendor/rich/__pycache__/constrain.cpython-310.pyc,,
803
+ pip/_vendor/rich/__pycache__/containers.cpython-310.pyc,,
804
+ pip/_vendor/rich/__pycache__/control.cpython-310.pyc,,
805
+ pip/_vendor/rich/__pycache__/default_styles.cpython-310.pyc,,
806
+ pip/_vendor/rich/__pycache__/diagnose.cpython-310.pyc,,
807
+ pip/_vendor/rich/__pycache__/emoji.cpython-310.pyc,,
808
+ pip/_vendor/rich/__pycache__/errors.cpython-310.pyc,,
809
+ pip/_vendor/rich/__pycache__/file_proxy.cpython-310.pyc,,
810
+ pip/_vendor/rich/__pycache__/filesize.cpython-310.pyc,,
811
+ pip/_vendor/rich/__pycache__/highlighter.cpython-310.pyc,,
812
+ pip/_vendor/rich/__pycache__/json.cpython-310.pyc,,
813
+ pip/_vendor/rich/__pycache__/jupyter.cpython-310.pyc,,
814
+ pip/_vendor/rich/__pycache__/layout.cpython-310.pyc,,
815
+ pip/_vendor/rich/__pycache__/live.cpython-310.pyc,,
816
+ pip/_vendor/rich/__pycache__/live_render.cpython-310.pyc,,
817
+ pip/_vendor/rich/__pycache__/logging.cpython-310.pyc,,
818
+ pip/_vendor/rich/__pycache__/markup.cpython-310.pyc,,
819
+ pip/_vendor/rich/__pycache__/measure.cpython-310.pyc,,
820
+ pip/_vendor/rich/__pycache__/padding.cpython-310.pyc,,
821
+ pip/_vendor/rich/__pycache__/pager.cpython-310.pyc,,
822
+ pip/_vendor/rich/__pycache__/palette.cpython-310.pyc,,
823
+ pip/_vendor/rich/__pycache__/panel.cpython-310.pyc,,
824
+ pip/_vendor/rich/__pycache__/pretty.cpython-310.pyc,,
825
+ pip/_vendor/rich/__pycache__/progress.cpython-310.pyc,,
826
+ pip/_vendor/rich/__pycache__/progress_bar.cpython-310.pyc,,
827
+ pip/_vendor/rich/__pycache__/prompt.cpython-310.pyc,,
828
+ pip/_vendor/rich/__pycache__/protocol.cpython-310.pyc,,
829
+ pip/_vendor/rich/__pycache__/region.cpython-310.pyc,,
830
+ pip/_vendor/rich/__pycache__/repr.cpython-310.pyc,,
831
+ pip/_vendor/rich/__pycache__/rule.cpython-310.pyc,,
832
+ pip/_vendor/rich/__pycache__/scope.cpython-310.pyc,,
833
+ pip/_vendor/rich/__pycache__/screen.cpython-310.pyc,,
834
+ pip/_vendor/rich/__pycache__/segment.cpython-310.pyc,,
835
+ pip/_vendor/rich/__pycache__/spinner.cpython-310.pyc,,
836
+ pip/_vendor/rich/__pycache__/status.cpython-310.pyc,,
837
+ pip/_vendor/rich/__pycache__/style.cpython-310.pyc,,
838
+ pip/_vendor/rich/__pycache__/styled.cpython-310.pyc,,
839
+ pip/_vendor/rich/__pycache__/syntax.cpython-310.pyc,,
840
+ pip/_vendor/rich/__pycache__/table.cpython-310.pyc,,
841
+ pip/_vendor/rich/__pycache__/tabulate.cpython-310.pyc,,
842
+ pip/_vendor/rich/__pycache__/terminal_theme.cpython-310.pyc,,
843
+ pip/_vendor/rich/__pycache__/text.cpython-310.pyc,,
844
+ pip/_vendor/rich/__pycache__/theme.cpython-310.pyc,,
845
+ pip/_vendor/rich/__pycache__/themes.cpython-310.pyc,,
846
+ pip/_vendor/rich/__pycache__/traceback.cpython-310.pyc,,
847
+ pip/_vendor/rich/__pycache__/tree.cpython-310.pyc,,
848
+ pip/_vendor/rich/_cell_widths.py,sha256=2n4EiJi3X9sqIq0O16kUZ_zy6UYMd3xFfChlKfnW1Hc,10096
849
+ pip/_vendor/rich/_emoji_codes.py,sha256=hu1VL9nbVdppJrVoijVshRlcRRe_v3dju3Mmd2sKZdY,140235
850
+ pip/_vendor/rich/_emoji_replace.py,sha256=n-kcetsEUx2ZUmhQrfeMNc-teeGhpuSQ5F8VPBsyvDo,1064
851
+ pip/_vendor/rich/_extension.py,sha256=Xt47QacCKwYruzjDi-gOBq724JReDj9Cm9xUi5fr-34,265
852
+ pip/_vendor/rich/_inspect.py,sha256=vq6BjewwEvddjcBTr_lCcjYQBsKi92aTNpcXyaA5ERA,7444
853
+ pip/_vendor/rich/_log_render.py,sha256=1ByI0PA1ZpxZY3CGJOK54hjlq4X-Bz_boIjIqCd8Kns,3225
854
+ pip/_vendor/rich/_loop.py,sha256=hV_6CLdoPm0va22Wpw4zKqM0RYsz3TZxXj0PoS-9eDQ,1236
855
+ pip/_vendor/rich/_lru_cache.py,sha256=M7H1ZQF32o6SxrpOur9zTIhEHlNXT9XnrcdhruUmG5I,1246
856
+ pip/_vendor/rich/_palettes.py,sha256=cdev1JQKZ0JvlguV9ipHgznTdnvlIzUFDBb0It2PzjI,7063
857
+ pip/_vendor/rich/_pick.py,sha256=evDt8QN4lF5CiwrUIXlOJCntitBCOsI3ZLPEIAVRLJU,423
858
+ pip/_vendor/rich/_ratio.py,sha256=2lLSliL025Y-YMfdfGbutkQDevhcyDqc-DtUYW9mU70,5472
859
+ pip/_vendor/rich/_spinners.py,sha256=huT1biTlwyp9Lm8S7bLfVzg1psUaIH5xHDwTaWEHVh0,26521
860
+ pip/_vendor/rich/_stack.py,sha256=-C8OK7rxn3sIUdVwxZBBpeHhIzX0eI-VM3MemYfaXm0,351
861
+ pip/_vendor/rich/_timer.py,sha256=zelxbT6oPFZnNrwWPpc1ktUeAT-Vc4fuFcRZLQGLtMI,417
862
+ pip/_vendor/rich/_windows.py,sha256=nBO71icHMIHlzT7hg6fkoIdh1mT-5MvDdPDwunkshyw,2065
863
+ pip/_vendor/rich/_wrap.py,sha256=OtnSxnERkuNlSM1d_MYtNg8KIYTcTBk3peg16dCZH_U,1804
864
+ pip/_vendor/rich/abc.py,sha256=ON-E-ZqSSheZ88VrKX2M3PXpFbGEUUZPMa_Af0l-4f0,890
865
+ pip/_vendor/rich/align.py,sha256=2zRHV8SzR5eP-vQkSDgjmgsBLBluCBwykgejAW6oRD0,10425
866
+ pip/_vendor/rich/ansi.py,sha256=QaVVkfvVL6C3OsuWI9iQ-iJFkMsMohjYlxgMLnVTEPo,6676
867
+ pip/_vendor/rich/bar.py,sha256=a7UD303BccRCrEhGjfMElpv5RFYIinaAhAuqYqhUvmw,3264
868
+ pip/_vendor/rich/box.py,sha256=o0ywz1iW0WjGLPrRVDAZPh1CVPEgAOaWsn8Bf3sf43g,9069
869
+ pip/_vendor/rich/cells.py,sha256=NadN20gFxE8Aj-2S3Drn7qgn-ZpsRZcNnTNtweRL7rA,4285
870
+ pip/_vendor/rich/color.py,sha256=SD3yTf3t8japb-jOv8GYCMCDqyzpipzXS_0rAXhSlU4,17285
871
+ pip/_vendor/rich/color_triplet.py,sha256=3lhQkdJbvWPoLDO-AnYImAWmJvV5dlgYNCVZ97ORaN4,1054
872
+ pip/_vendor/rich/columns.py,sha256=HUX0KcMm9dsKNi11fTbiM_h2iDtl8ySCaVcxlalEzq8,7131
873
+ pip/_vendor/rich/console.py,sha256=bioCy8012eZ8PIOBxMyyqxYPltKk2pGEG9jmwylNCQk,81236
874
+ pip/_vendor/rich/constrain.py,sha256=1VIPuC8AgtKWrcncQrjBdYqA3JVWysu6jZo1rrh7c7Q,1288
875
+ pip/_vendor/rich/containers.py,sha256=aKgm5UDHn5Nmui6IJaKdsZhbHClh_X7D-_Wg8Ehrr7s,5497
876
+ pip/_vendor/rich/control.py,sha256=qxg6Yjd78XuF0VxthlT8O4dpvpACYwKkBfm2S4-IvHA,5298
877
+ pip/_vendor/rich/default_styles.py,sha256=At42PcWzmnYWcx5fUOKyOUpI8HK5m4ItZqxkgHToaMs,7614
878
+ pip/_vendor/rich/diagnose.py,sha256=4L8SZfbqjIRotzJ39QzD9-d4I80FyV1mNKHryg1eArE,183
879
+ pip/_vendor/rich/emoji.py,sha256=omTF9asaAnsM4yLY94eR_9dgRRSm1lHUszX20D1yYCQ,2501
880
+ pip/_vendor/rich/errors.py,sha256=5pP3Kc5d4QJ_c0KFsxrfyhjiPVe7J1zOqSFbFAzcV-Y,642
881
+ pip/_vendor/rich/file_proxy.py,sha256=fHeReSO3VJ7IbH_9ri-OrPYbFC3UYOzeTNjngiiWOcY,1613
882
+ pip/_vendor/rich/filesize.py,sha256=oQJnM5_7ygkpzt3GtNq5l3F6gmB7YahBA5vpdQVKLwI,2511
883
+ pip/_vendor/rich/highlighter.py,sha256=AdhjC0meTYswZ_xKgka0cRYdNjLABLUzHAbyF3QpPWo,4894
884
+ pip/_vendor/rich/json.py,sha256=RCm4lXBXrjvXHpqrWPH8wdGP0jEo4IohLmkddlhRY18,5051
885
+ pip/_vendor/rich/jupyter.py,sha256=4sxNAwJs4g3dYfWy_enPw9fp0Tdn-82tV4T9uh9vAOM,3025
886
+ pip/_vendor/rich/layout.py,sha256=b64KMDP2EPiC103P-v-_VZKGY13oWiiGS418P_KRRlc,14048
887
+ pip/_vendor/rich/live.py,sha256=OKxMaFU5sFfuR--cJftGYjSvg1VPQri1U_DNZUjCsvI,13711
888
+ pip/_vendor/rich/live_render.py,sha256=zElm3PrfSIvjOce28zETHMIUf9pFYSUA5o0AflgUP64,3667
889
+ pip/_vendor/rich/logging.py,sha256=YNcCSK6pCo2Wg6JKqScAe6VgFqebHBnS5nDnBO4gXAA,10868
890
+ pip/_vendor/rich/markup.py,sha256=hsVW_k1TIvj5OPPQ12ihAii9HSVa8N1TStvA5B2GGpo,8058
891
+ pip/_vendor/rich/measure.py,sha256=Z74XvzIgLZm0xH-QIo1uX5d4oahavHe8D8MKyxLNqPQ,5258
892
+ pip/_vendor/rich/padding.py,sha256=kTFGsdGe0os7tXLnHKpwTI90CXEvrceeZGCshmJy5zw,4970
893
+ pip/_vendor/rich/pager.py,sha256=VK_2EfH0JduZWdyV-KZma06bvi_V5PWmHG6W7BoiaTg,838
894
+ pip/_vendor/rich/palette.py,sha256=lInvR1ODDT2f3UZMfL1grq7dY_pDdKHw4bdUgOGaM4Y,3396
895
+ pip/_vendor/rich/panel.py,sha256=O6ORyIhDcOLSEasTjpcDvmhvIcppPGCeQoXpoycIUT8,8637
896
+ pip/_vendor/rich/pretty.py,sha256=HAB68BpYysaL1EXeV4X5Tt-U2hDlcLpbFz06fkojWWE,32572
897
+ pip/_vendor/rich/progress.py,sha256=jcgi7aMnQ_YjSpAmQkalwtNsgVn9i56SeZGprr7tuOk,35926
898
+ pip/_vendor/rich/progress_bar.py,sha256=ELiBaxJOgsRYKpNIrot7BC0bFXvmf8cTd6nxI02BbK0,7762
899
+ pip/_vendor/rich/prompt.py,sha256=gKVd13YWv6jedzwcRPZGUINBjC-xcJhJ_xz_NvMW80c,11307
900
+ pip/_vendor/rich/protocol.py,sha256=Vx6n4fEoSDhzSup8t3KH0iK2RWyssIOks5E0S1qw1GA,1401
901
+ pip/_vendor/rich/region.py,sha256=rNT9xZrVZTYIXZC0NYn41CJQwYNbR-KecPOxTgQvB8Y,166
902
+ pip/_vendor/rich/repr.py,sha256=1A0U0_ibG_bZbw71pUBIctO9Az-CQUuyOTbiKcJOwyw,4309
903
+ pip/_vendor/rich/rule.py,sha256=cPK6NYo4kzh-vM_8a-rXajXplsbaHa6ahErYvGSsrJ0,4197
904
+ pip/_vendor/rich/scope.py,sha256=HX13XsJfqzQHpPfw4Jn9JmJjCsRj9uhHxXQEqjkwyLA,2842
905
+ pip/_vendor/rich/screen.py,sha256=YoeReESUhx74grqb0mSSb9lghhysWmFHYhsbMVQjXO8,1591
906
+ pip/_vendor/rich/segment.py,sha256=MBBAWaHyqCQFCfiNbrTW4BGaFR1uU31XktJ1S3Taqb4,23916
907
+ pip/_vendor/rich/spinner.py,sha256=V6dW0jIk5IO0_2MyxyftQf5VjCHI0T2cRhJ4F31hPIQ,4312
908
+ pip/_vendor/rich/status.py,sha256=gJsIXIZeSo3urOyxRUjs6VrhX5CZrA0NxIQ-dxhCnwo,4425
909
+ pip/_vendor/rich/style.py,sha256=AD1I7atfclsFCtGeL8ronH1Jj-02WLp9ZQ2VYqmpBjM,26469
910
+ pip/_vendor/rich/styled.py,sha256=eZNnzGrI4ki_54pgY3Oj0T-x3lxdXTYh4_ryDB24wBU,1258
911
+ pip/_vendor/rich/syntax.py,sha256=pJAD08ywowg5xVwTGCqUOMpDYskjoMoDYEV-hryEX5s,26994
912
+ pip/_vendor/rich/table.py,sha256=oQAEBaV4zMUPyg_tSA93_GrCirdIf-osolxf9wb3pEo,36757
913
+ pip/_vendor/rich/tabulate.py,sha256=nl0oeNbiXectEgTHyj3K7eN4NZMISpaogpOdZyEOGbs,1700
914
+ pip/_vendor/rich/terminal_theme.py,sha256=E0nI_ycFpvflamt-KVCY4J52LmUjRi1Y6ICB-Ef3gMo,1459
915
+ pip/_vendor/rich/text.py,sha256=auX3LpY-I6PBiNyxB3o3LyMEx7lna2cx9IbNQJDwtw8,44424
916
+ pip/_vendor/rich/theme.py,sha256=GKNtQhDBZKAzDaY0vQVQQFzbc0uWfFe6CJXA-syT7zQ,3627
917
+ pip/_vendor/rich/themes.py,sha256=0xgTLozfabebYtcJtDdC5QkX5IVUEaviqDUJJh4YVFk,102
918
+ pip/_vendor/rich/traceback.py,sha256=hAU3IR295eFuup_px2NU4aCEWu7KQs1qpZbnqoHCtR0,25935
919
+ pip/_vendor/rich/tree.py,sha256=JxyWbc27ZuwoLQnd7I-rSsRsqI9lzaVKlfTLJXla9U0,9122
920
+ pip/_vendor/six.py,sha256=TOOfQi7nFGfMrIvtdr6wX4wyHH8M7aknmuLfo2cBBrM,34549
921
+ pip/_vendor/tenacity/__init__.py,sha256=GLLsTFD4Bd5VDgTR6mU_FxyOsrxc48qONorVaRebeD4,18257
922
+ pip/_vendor/tenacity/__pycache__/__init__.cpython-310.pyc,,
923
+ pip/_vendor/tenacity/__pycache__/_asyncio.cpython-310.pyc,,
924
+ pip/_vendor/tenacity/__pycache__/_utils.cpython-310.pyc,,
925
+ pip/_vendor/tenacity/__pycache__/after.cpython-310.pyc,,
926
+ pip/_vendor/tenacity/__pycache__/before.cpython-310.pyc,,
927
+ pip/_vendor/tenacity/__pycache__/before_sleep.cpython-310.pyc,,
928
+ pip/_vendor/tenacity/__pycache__/nap.cpython-310.pyc,,
929
+ pip/_vendor/tenacity/__pycache__/retry.cpython-310.pyc,,
930
+ pip/_vendor/tenacity/__pycache__/stop.cpython-310.pyc,,
931
+ pip/_vendor/tenacity/__pycache__/tornadoweb.cpython-310.pyc,,
932
+ pip/_vendor/tenacity/__pycache__/wait.cpython-310.pyc,,
933
+ pip/_vendor/tenacity/_asyncio.py,sha256=HEb0BVJEeBJE9P-m9XBxh1KcaF96BwoeqkJCL5sbVcQ,3314
934
+ pip/_vendor/tenacity/_utils.py,sha256=-y68scDcyoqvTJuJJ0GTfjdSCljEYlbCYvgk7nM4NdM,1944
935
+ pip/_vendor/tenacity/after.py,sha256=dlmyxxFy2uqpLXDr838DiEd7jgv2AGthsWHGYcGYsaI,1496
936
+ pip/_vendor/tenacity/before.py,sha256=7XtvRmO0dRWUp8SVn24OvIiGFj8-4OP5muQRUiWgLh0,1376
937
+ pip/_vendor/tenacity/before_sleep.py,sha256=ThyDvqKU5yle_IvYQz_b6Tp6UjUS0PhVp6zgqYl9U6Y,1908
938
+ pip/_vendor/tenacity/nap.py,sha256=fRWvnz1aIzbIq9Ap3gAkAZgDH6oo5zxMrU6ZOVByq0I,1383
939
+ pip/_vendor/tenacity/retry.py,sha256=62R71W59bQjuNyFKsDM7hE2aEkEPtwNBRA0tnsEvgSk,6645
940
+ pip/_vendor/tenacity/stop.py,sha256=sKHmHaoSaW6sKu3dTxUVKr1-stVkY7lw4Y9yjZU30zQ,2790
941
+ pip/_vendor/tenacity/tornadoweb.py,sha256=E8lWO2nwe6dJgoB-N2HhQprYLDLB_UdSgFnv-EN6wKE,2145
942
+ pip/_vendor/tenacity/wait.py,sha256=e_Saa6I2tsNLpCL1t9897wN2fGb0XQMQlE4bU2t9V2w,6691
943
+ pip/_vendor/tomli/__init__.py,sha256=z1Elt0nLAqU5Y0DOn9p__8QnLWavlEOpRyQikdYgKro,230
944
+ pip/_vendor/tomli/__pycache__/__init__.cpython-310.pyc,,
945
+ pip/_vendor/tomli/__pycache__/_parser.cpython-310.pyc,,
946
+ pip/_vendor/tomli/__pycache__/_re.cpython-310.pyc,,
947
+ pip/_vendor/tomli/_parser.py,sha256=50BD4o9YbzFAGAYyZLqZC8F81DQ7iWWyJnrHNwBKa6A,22415
948
+ pip/_vendor/tomli/_re.py,sha256=5GPfgXKteg7wRFCF-DzlkAPI2ilHbkMK2-JC49F-AJQ,2681
949
+ pip/_vendor/typing_extensions.py,sha256=1uqi_RSlI7gos4eJB_NEV3d5wQwzTUQHd3_jrkbTo8Q,87149
950
+ pip/_vendor/urllib3/__init__.py,sha256=j3yzHIbmW7CS-IKQJ9-PPQf_YKO8EOAey_rMW0UR7us,2763
951
+ pip/_vendor/urllib3/__pycache__/__init__.cpython-310.pyc,,
952
+ pip/_vendor/urllib3/__pycache__/_collections.cpython-310.pyc,,
953
+ pip/_vendor/urllib3/__pycache__/_version.cpython-310.pyc,,
954
+ pip/_vendor/urllib3/__pycache__/connection.cpython-310.pyc,,
955
+ pip/_vendor/urllib3/__pycache__/connectionpool.cpython-310.pyc,,
956
+ pip/_vendor/urllib3/__pycache__/exceptions.cpython-310.pyc,,
957
+ pip/_vendor/urllib3/__pycache__/fields.cpython-310.pyc,,
958
+ pip/_vendor/urllib3/__pycache__/filepost.cpython-310.pyc,,
959
+ pip/_vendor/urllib3/__pycache__/poolmanager.cpython-310.pyc,,
960
+ pip/_vendor/urllib3/__pycache__/request.cpython-310.pyc,,
961
+ pip/_vendor/urllib3/__pycache__/response.cpython-310.pyc,,
962
+ pip/_vendor/urllib3/_collections.py,sha256=pyASJJhW7wdOpqJj9QJA8FyGRfr8E8uUUhqUvhF0728,11372
963
+ pip/_vendor/urllib3/_version.py,sha256=_NdMUQaeBvFHAX2z3zAIX2Wum58A6rVtY1f7ByHsQ4g,63
964
+ pip/_vendor/urllib3/connection.py,sha256=6zokyboYYKm9VkyrQvVVLgxMyCZK7n9Vmg_2ZK6pbhc,20076
965
+ pip/_vendor/urllib3/connectionpool.py,sha256=eQ1jWJ2dDdRADuCj9Yx7RCpzY2iM8P32jGHbjYBkAIk,39308
966
+ pip/_vendor/urllib3/contrib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
967
+ pip/_vendor/urllib3/contrib/__pycache__/__init__.cpython-310.pyc,,
968
+ pip/_vendor/urllib3/contrib/__pycache__/_appengine_environ.cpython-310.pyc,,
969
+ pip/_vendor/urllib3/contrib/__pycache__/appengine.cpython-310.pyc,,
970
+ pip/_vendor/urllib3/contrib/__pycache__/ntlmpool.cpython-310.pyc,,
971
+ pip/_vendor/urllib3/contrib/__pycache__/pyopenssl.cpython-310.pyc,,
972
+ pip/_vendor/urllib3/contrib/__pycache__/securetransport.cpython-310.pyc,,
973
+ pip/_vendor/urllib3/contrib/__pycache__/socks.cpython-310.pyc,,
974
+ pip/_vendor/urllib3/contrib/_appengine_environ.py,sha256=bDbyOEhW2CKLJcQqAKAyrEHN-aklsyHFKq6vF8ZFsmk,957
975
+ pip/_vendor/urllib3/contrib/_securetransport/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
976
+ pip/_vendor/urllib3/contrib/_securetransport/__pycache__/__init__.cpython-310.pyc,,
977
+ pip/_vendor/urllib3/contrib/_securetransport/__pycache__/bindings.cpython-310.pyc,,
978
+ pip/_vendor/urllib3/contrib/_securetransport/__pycache__/low_level.cpython-310.pyc,,
979
+ pip/_vendor/urllib3/contrib/_securetransport/bindings.py,sha256=4Xk64qIkPBt09A5q-RIFUuDhNc9mXilVapm7WnYnzRw,17632
980
+ pip/_vendor/urllib3/contrib/_securetransport/low_level.py,sha256=B2JBB2_NRP02xK6DCa1Pa9IuxrPwxzDzZbixQkb7U9M,13922
981
+ pip/_vendor/urllib3/contrib/appengine.py,sha256=lfzpHFmJiO82shClLEm3QB62SYgHWnjpZOH_2JhU5Tc,11034
982
+ pip/_vendor/urllib3/contrib/ntlmpool.py,sha256=ej9gGvfAb2Gt00lafFp45SIoRz-QwrQ4WChm6gQmAlM,4538
983
+ pip/_vendor/urllib3/contrib/pyopenssl.py,sha256=DD4pInv_3OEEGffEFynBoirc8ldR789sLmGSKukzA0E,16900
984
+ pip/_vendor/urllib3/contrib/securetransport.py,sha256=4qUKo7PUV-vVIqXmr2BD-sH7qplB918jiD5eNsRI9vU,34449
985
+ pip/_vendor/urllib3/contrib/socks.py,sha256=aRi9eWXo9ZEb95XUxef4Z21CFlnnjbEiAo9HOseoMt4,7097
986
+ pip/_vendor/urllib3/exceptions.py,sha256=0Mnno3KHTNfXRfY7638NufOPkUb6mXOm-Lqj-4x2w8A,8217
987
+ pip/_vendor/urllib3/fields.py,sha256=kvLDCg_JmH1lLjUUEY_FLS8UhY7hBvDPuVETbY8mdrM,8579
988
+ pip/_vendor/urllib3/filepost.py,sha256=5b_qqgRHVlL7uLtdAYBzBh-GHmU5AfJVt_2N0XS3PeY,2440
989
+ pip/_vendor/urllib3/packages/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
990
+ pip/_vendor/urllib3/packages/__pycache__/__init__.cpython-310.pyc,,
991
+ pip/_vendor/urllib3/packages/__pycache__/six.cpython-310.pyc,,
992
+ pip/_vendor/urllib3/packages/backports/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
993
+ pip/_vendor/urllib3/packages/backports/__pycache__/__init__.cpython-310.pyc,,
994
+ pip/_vendor/urllib3/packages/backports/__pycache__/makefile.cpython-310.pyc,,
995
+ pip/_vendor/urllib3/packages/backports/makefile.py,sha256=nbzt3i0agPVP07jqqgjhaYjMmuAi_W5E0EywZivVO8E,1417
996
+ pip/_vendor/urllib3/packages/six.py,sha256=1LVW7ljqRirFlfExjwl-v1B7vSAUNTmzGMs-qays2zg,34666
997
+ pip/_vendor/urllib3/poolmanager.py,sha256=0yYas7w5XQzsHvypcd1hstw4uPlNZ56cFwSA4Lg10XI,20954
998
+ pip/_vendor/urllib3/request.py,sha256=ZFSIqX0C6WizixecChZ3_okyu7BEv0lZu1VT0s6h4SM,5985
999
+ pip/_vendor/urllib3/response.py,sha256=hGhGBh7TkEkh_IQg5C1W_xuPNrgIKv5BUXPyE-q0LuE,28203
1000
+ pip/_vendor/urllib3/util/__init__.py,sha256=JEmSmmqqLyaw8P51gUImZh8Gwg9i1zSe-DoqAitn2nc,1155
1001
+ pip/_vendor/urllib3/util/__pycache__/__init__.cpython-310.pyc,,
1002
+ pip/_vendor/urllib3/util/__pycache__/connection.cpython-310.pyc,,
1003
+ pip/_vendor/urllib3/util/__pycache__/proxy.cpython-310.pyc,,
1004
+ pip/_vendor/urllib3/util/__pycache__/queue.cpython-310.pyc,,
1005
+ pip/_vendor/urllib3/util/__pycache__/request.cpython-310.pyc,,
1006
+ pip/_vendor/urllib3/util/__pycache__/response.cpython-310.pyc,,
1007
+ pip/_vendor/urllib3/util/__pycache__/retry.cpython-310.pyc,,
1008
+ pip/_vendor/urllib3/util/__pycache__/ssl_.cpython-310.pyc,,
1009
+ pip/_vendor/urllib3/util/__pycache__/ssl_match_hostname.cpython-310.pyc,,
1010
+ pip/_vendor/urllib3/util/__pycache__/ssltransport.cpython-310.pyc,,
1011
+ pip/_vendor/urllib3/util/__pycache__/timeout.cpython-310.pyc,,
1012
+ pip/_vendor/urllib3/util/__pycache__/url.cpython-310.pyc,,
1013
+ pip/_vendor/urllib3/util/__pycache__/wait.cpython-310.pyc,,
1014
+ pip/_vendor/urllib3/util/connection.py,sha256=5Lx2B1PW29KxBn2T0xkN1CBgRBa3gGVJBKoQoRogEVk,4901
1015
+ pip/_vendor/urllib3/util/proxy.py,sha256=zUvPPCJrp6dOF0N4GAVbOcl6o-4uXKSrGiTkkr5vUS4,1605
1016
+ pip/_vendor/urllib3/util/queue.py,sha256=nRgX8_eX-_VkvxoX096QWoz8Ps0QHUAExILCY_7PncM,498
1017
+ pip/_vendor/urllib3/util/request.py,sha256=NnzaEKQ1Pauw5MFMV6HmgEMHITf0Aua9fQuzi2uZzGc,4123
1018
+ pip/_vendor/urllib3/util/response.py,sha256=GJpg3Egi9qaJXRwBh5wv-MNuRWan5BIu40oReoxWP28,3510
1019
+ pip/_vendor/urllib3/util/retry.py,sha256=J39USWUTcYYHibxaBy2ZLlXnBZX0N1leKok6cCdtUMw,22048
1020
+ pip/_vendor/urllib3/util/ssl_.py,sha256=X4-AqW91aYPhPx6-xbf66yHFQKbqqfC_5Zt4WkLX1Hc,17177
1021
+ pip/_vendor/urllib3/util/ssl_match_hostname.py,sha256=w01jCYuwvQ038p9mhc1P1gF8IiTN1qHakThpoukOlbw,5751
1022
+ pip/_vendor/urllib3/util/ssltransport.py,sha256=NA-u5rMTrDFDFC8QzRKUEKMG0561hOD4qBTr3Z4pv6E,6895
1023
+ pip/_vendor/urllib3/util/timeout.py,sha256=QSbBUNOB9yh6AnDn61SrLQ0hg5oz0I9-uXEG91AJuIg,10003
1024
+ pip/_vendor/urllib3/util/url.py,sha256=QVEzcbHipbXyCWwH6R4K4TR-N8T4LM55WEMwNUTBmLE,14047
1025
+ pip/_vendor/urllib3/util/wait.py,sha256=3MUKRSAUJDB2tgco7qRUskW0zXGAWYvRRE4Q1_6xlLs,5404
1026
+ pip/_vendor/vendor.txt,sha256=H-9fScoah7nx4K8O4Uft0l5iH2P_mVo4RqyuMVOTJEc,496
1027
+ pip/_vendor/webencodings/__init__.py,sha256=qOBJIuPy_4ByYH6W_bNgJF-qYQ2DoU-dKsDu5yRWCXg,10579
1028
+ pip/_vendor/webencodings/__pycache__/__init__.cpython-310.pyc,,
1029
+ pip/_vendor/webencodings/__pycache__/labels.cpython-310.pyc,,
1030
+ pip/_vendor/webencodings/__pycache__/mklabels.cpython-310.pyc,,
1031
+ pip/_vendor/webencodings/__pycache__/tests.cpython-310.pyc,,
1032
+ pip/_vendor/webencodings/__pycache__/x_user_defined.cpython-310.pyc,,
1033
+ pip/_vendor/webencodings/labels.py,sha256=4AO_KxTddqGtrL9ns7kAPjb0CcN6xsCIxbK37HY9r3E,8979
1034
+ pip/_vendor/webencodings/mklabels.py,sha256=GYIeywnpaLnP0GSic8LFWgd0UVvO_l1Nc6YoF-87R_4,1305
1035
+ pip/_vendor/webencodings/tests.py,sha256=OtGLyjhNY1fvkW1GvLJ_FV9ZoqC9Anyjr7q3kxTbzNs,6563
1036
+ pip/_vendor/webencodings/x_user_defined.py,sha256=yOqWSdmpytGfUgh_Z6JYgDNhoc-BAHyyeeT15Fr42tM,4307
1037
+ pip/py.typed,sha256=EBVvvPRTn_eIpz5e5QztSCdrMX7Qwd7VP93RSoIlZ2I,286
venv/lib/python3.10/site-packages/pip-22.0.2.dist-info/REQUESTED ADDED
File without changes
venv/lib/python3.10/site-packages/pip-22.0.2.dist-info/WHEEL ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ Wheel-Version: 1.0
2
+ Generator: bdist_wheel (0.37.1)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
venv/lib/python3.10/site-packages/pip-22.0.2.dist-info/entry_points.txt ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ [console_scripts]
2
+ pip = pip._internal.cli.main:main
3
+ pip3 = pip._internal.cli.main:main
4
+ pip3.10 = pip._internal.cli.main:main
5
+
venv/lib/python3.10/site-packages/pip-22.0.2.dist-info/top_level.txt ADDED
@@ -0,0 +1 @@
 
 
1
+ pip
venv/lib/python3.10/site-packages/pip/_vendor/pygments/__pycache__/token.cpython-310.pyc ADDED
Binary file (4.75 kB). View file
 
venv/lib/python3.10/site-packages/pip/_vendor/pygments/__pycache__/unistring.cpython-310.pyc ADDED
Binary file (31.3 kB). View file
 
venv/lib/python3.10/site-packages/pip/_vendor/pygments/__pycache__/util.cpython-310.pyc ADDED
Binary file (9.26 kB). View file
 
venv/lib/python3.10/site-packages/pip/_vendor/pygments/filters/__init__.py ADDED
@@ -0,0 +1,937 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.filters
3
+ ~~~~~~~~~~~~~~~~
4
+
5
+ Module containing filter lookup functions and default
6
+ filters.
7
+
8
+ :copyright: Copyright 2006-2021 by the Pygments team, see AUTHORS.
9
+ :license: BSD, see LICENSE for details.
10
+ """
11
+
12
+ import re
13
+
14
+ from pip._vendor.pygments.token import String, Comment, Keyword, Name, Error, Whitespace, \
15
+ string_to_tokentype
16
+ from pip._vendor.pygments.filter import Filter
17
+ from pip._vendor.pygments.util import get_list_opt, get_int_opt, get_bool_opt, \
18
+ get_choice_opt, ClassNotFound, OptionError
19
+ from pip._vendor.pygments.plugin import find_plugin_filters
20
+
21
+
22
+ def find_filter_class(filtername):
23
+ """Lookup a filter by name. Return None if not found."""
24
+ if filtername in FILTERS:
25
+ return FILTERS[filtername]
26
+ for name, cls in find_plugin_filters():
27
+ if name == filtername:
28
+ return cls
29
+ return None
30
+
31
+
32
+ def get_filter_by_name(filtername, **options):
33
+ """Return an instantiated filter.
34
+
35
+ Options are passed to the filter initializer if wanted.
36
+ Raise a ClassNotFound if not found.
37
+ """
38
+ cls = find_filter_class(filtername)
39
+ if cls:
40
+ return cls(**options)
41
+ else:
42
+ raise ClassNotFound('filter %r not found' % filtername)
43
+
44
+
45
+ def get_all_filters():
46
+ """Return a generator of all filter names."""
47
+ yield from FILTERS
48
+ for name, _ in find_plugin_filters():
49
+ yield name
50
+
51
+
52
+ def _replace_special(ttype, value, regex, specialttype,
53
+ replacefunc=lambda x: x):
54
+ last = 0
55
+ for match in regex.finditer(value):
56
+ start, end = match.start(), match.end()
57
+ if start != last:
58
+ yield ttype, value[last:start]
59
+ yield specialttype, replacefunc(value[start:end])
60
+ last = end
61
+ if last != len(value):
62
+ yield ttype, value[last:]
63
+
64
+
65
+ class CodeTagFilter(Filter):
66
+ """Highlight special code tags in comments and docstrings.
67
+
68
+ Options accepted:
69
+
70
+ `codetags` : list of strings
71
+ A list of strings that are flagged as code tags. The default is to
72
+ highlight ``XXX``, ``TODO``, ``BUG`` and ``NOTE``.
73
+ """
74
+
75
+ def __init__(self, **options):
76
+ Filter.__init__(self, **options)
77
+ tags = get_list_opt(options, 'codetags',
78
+ ['XXX', 'TODO', 'BUG', 'NOTE'])
79
+ self.tag_re = re.compile(r'\b(%s)\b' % '|'.join([
80
+ re.escape(tag) for tag in tags if tag
81
+ ]))
82
+
83
+ def filter(self, lexer, stream):
84
+ regex = self.tag_re
85
+ for ttype, value in stream:
86
+ if ttype in String.Doc or \
87
+ ttype in Comment and \
88
+ ttype not in Comment.Preproc:
89
+ yield from _replace_special(ttype, value, regex, Comment.Special)
90
+ else:
91
+ yield ttype, value
92
+
93
+
94
+ class SymbolFilter(Filter):
95
+ """Convert mathematical symbols such as \\<longrightarrow> in Isabelle
96
+ or \\longrightarrow in LaTeX into Unicode characters.
97
+
98
+ This is mostly useful for HTML or console output when you want to
99
+ approximate the source rendering you'd see in an IDE.
100
+
101
+ Options accepted:
102
+
103
+ `lang` : string
104
+ The symbol language. Must be one of ``'isabelle'`` or
105
+ ``'latex'``. The default is ``'isabelle'``.
106
+ """
107
+
108
+ latex_symbols = {
109
+ '\\alpha' : '\U000003b1',
110
+ '\\beta' : '\U000003b2',
111
+ '\\gamma' : '\U000003b3',
112
+ '\\delta' : '\U000003b4',
113
+ '\\varepsilon' : '\U000003b5',
114
+ '\\zeta' : '\U000003b6',
115
+ '\\eta' : '\U000003b7',
116
+ '\\vartheta' : '\U000003b8',
117
+ '\\iota' : '\U000003b9',
118
+ '\\kappa' : '\U000003ba',
119
+ '\\lambda' : '\U000003bb',
120
+ '\\mu' : '\U000003bc',
121
+ '\\nu' : '\U000003bd',
122
+ '\\xi' : '\U000003be',
123
+ '\\pi' : '\U000003c0',
124
+ '\\varrho' : '\U000003c1',
125
+ '\\sigma' : '\U000003c3',
126
+ '\\tau' : '\U000003c4',
127
+ '\\upsilon' : '\U000003c5',
128
+ '\\varphi' : '\U000003c6',
129
+ '\\chi' : '\U000003c7',
130
+ '\\psi' : '\U000003c8',
131
+ '\\omega' : '\U000003c9',
132
+ '\\Gamma' : '\U00000393',
133
+ '\\Delta' : '\U00000394',
134
+ '\\Theta' : '\U00000398',
135
+ '\\Lambda' : '\U0000039b',
136
+ '\\Xi' : '\U0000039e',
137
+ '\\Pi' : '\U000003a0',
138
+ '\\Sigma' : '\U000003a3',
139
+ '\\Upsilon' : '\U000003a5',
140
+ '\\Phi' : '\U000003a6',
141
+ '\\Psi' : '\U000003a8',
142
+ '\\Omega' : '\U000003a9',
143
+ '\\leftarrow' : '\U00002190',
144
+ '\\longleftarrow' : '\U000027f5',
145
+ '\\rightarrow' : '\U00002192',
146
+ '\\longrightarrow' : '\U000027f6',
147
+ '\\Leftarrow' : '\U000021d0',
148
+ '\\Longleftarrow' : '\U000027f8',
149
+ '\\Rightarrow' : '\U000021d2',
150
+ '\\Longrightarrow' : '\U000027f9',
151
+ '\\leftrightarrow' : '\U00002194',
152
+ '\\longleftrightarrow' : '\U000027f7',
153
+ '\\Leftrightarrow' : '\U000021d4',
154
+ '\\Longleftrightarrow' : '\U000027fa',
155
+ '\\mapsto' : '\U000021a6',
156
+ '\\longmapsto' : '\U000027fc',
157
+ '\\relbar' : '\U00002500',
158
+ '\\Relbar' : '\U00002550',
159
+ '\\hookleftarrow' : '\U000021a9',
160
+ '\\hookrightarrow' : '\U000021aa',
161
+ '\\leftharpoondown' : '\U000021bd',
162
+ '\\rightharpoondown' : '\U000021c1',
163
+ '\\leftharpoonup' : '\U000021bc',
164
+ '\\rightharpoonup' : '\U000021c0',
165
+ '\\rightleftharpoons' : '\U000021cc',
166
+ '\\leadsto' : '\U0000219d',
167
+ '\\downharpoonleft' : '\U000021c3',
168
+ '\\downharpoonright' : '\U000021c2',
169
+ '\\upharpoonleft' : '\U000021bf',
170
+ '\\upharpoonright' : '\U000021be',
171
+ '\\restriction' : '\U000021be',
172
+ '\\uparrow' : '\U00002191',
173
+ '\\Uparrow' : '\U000021d1',
174
+ '\\downarrow' : '\U00002193',
175
+ '\\Downarrow' : '\U000021d3',
176
+ '\\updownarrow' : '\U00002195',
177
+ '\\Updownarrow' : '\U000021d5',
178
+ '\\langle' : '\U000027e8',
179
+ '\\rangle' : '\U000027e9',
180
+ '\\lceil' : '\U00002308',
181
+ '\\rceil' : '\U00002309',
182
+ '\\lfloor' : '\U0000230a',
183
+ '\\rfloor' : '\U0000230b',
184
+ '\\flqq' : '\U000000ab',
185
+ '\\frqq' : '\U000000bb',
186
+ '\\bot' : '\U000022a5',
187
+ '\\top' : '\U000022a4',
188
+ '\\wedge' : '\U00002227',
189
+ '\\bigwedge' : '\U000022c0',
190
+ '\\vee' : '\U00002228',
191
+ '\\bigvee' : '\U000022c1',
192
+ '\\forall' : '\U00002200',
193
+ '\\exists' : '\U00002203',
194
+ '\\nexists' : '\U00002204',
195
+ '\\neg' : '\U000000ac',
196
+ '\\Box' : '\U000025a1',
197
+ '\\Diamond' : '\U000025c7',
198
+ '\\vdash' : '\U000022a2',
199
+ '\\models' : '\U000022a8',
200
+ '\\dashv' : '\U000022a3',
201
+ '\\surd' : '\U0000221a',
202
+ '\\le' : '\U00002264',
203
+ '\\ge' : '\U00002265',
204
+ '\\ll' : '\U0000226a',
205
+ '\\gg' : '\U0000226b',
206
+ '\\lesssim' : '\U00002272',
207
+ '\\gtrsim' : '\U00002273',
208
+ '\\lessapprox' : '\U00002a85',
209
+ '\\gtrapprox' : '\U00002a86',
210
+ '\\in' : '\U00002208',
211
+ '\\notin' : '\U00002209',
212
+ '\\subset' : '\U00002282',
213
+ '\\supset' : '\U00002283',
214
+ '\\subseteq' : '\U00002286',
215
+ '\\supseteq' : '\U00002287',
216
+ '\\sqsubset' : '\U0000228f',
217
+ '\\sqsupset' : '\U00002290',
218
+ '\\sqsubseteq' : '\U00002291',
219
+ '\\sqsupseteq' : '\U00002292',
220
+ '\\cap' : '\U00002229',
221
+ '\\bigcap' : '\U000022c2',
222
+ '\\cup' : '\U0000222a',
223
+ '\\bigcup' : '\U000022c3',
224
+ '\\sqcup' : '\U00002294',
225
+ '\\bigsqcup' : '\U00002a06',
226
+ '\\sqcap' : '\U00002293',
227
+ '\\Bigsqcap' : '\U00002a05',
228
+ '\\setminus' : '\U00002216',
229
+ '\\propto' : '\U0000221d',
230
+ '\\uplus' : '\U0000228e',
231
+ '\\bigplus' : '\U00002a04',
232
+ '\\sim' : '\U0000223c',
233
+ '\\doteq' : '\U00002250',
234
+ '\\simeq' : '\U00002243',
235
+ '\\approx' : '\U00002248',
236
+ '\\asymp' : '\U0000224d',
237
+ '\\cong' : '\U00002245',
238
+ '\\equiv' : '\U00002261',
239
+ '\\Join' : '\U000022c8',
240
+ '\\bowtie' : '\U00002a1d',
241
+ '\\prec' : '\U0000227a',
242
+ '\\succ' : '\U0000227b',
243
+ '\\preceq' : '\U0000227c',
244
+ '\\succeq' : '\U0000227d',
245
+ '\\parallel' : '\U00002225',
246
+ '\\mid' : '\U000000a6',
247
+ '\\pm' : '\U000000b1',
248
+ '\\mp' : '\U00002213',
249
+ '\\times' : '\U000000d7',
250
+ '\\div' : '\U000000f7',
251
+ '\\cdot' : '\U000022c5',
252
+ '\\star' : '\U000022c6',
253
+ '\\circ' : '\U00002218',
254
+ '\\dagger' : '\U00002020',
255
+ '\\ddagger' : '\U00002021',
256
+ '\\lhd' : '\U000022b2',
257
+ '\\rhd' : '\U000022b3',
258
+ '\\unlhd' : '\U000022b4',
259
+ '\\unrhd' : '\U000022b5',
260
+ '\\triangleleft' : '\U000025c3',
261
+ '\\triangleright' : '\U000025b9',
262
+ '\\triangle' : '\U000025b3',
263
+ '\\triangleq' : '\U0000225c',
264
+ '\\oplus' : '\U00002295',
265
+ '\\bigoplus' : '\U00002a01',
266
+ '\\otimes' : '\U00002297',
267
+ '\\bigotimes' : '\U00002a02',
268
+ '\\odot' : '\U00002299',
269
+ '\\bigodot' : '\U00002a00',
270
+ '\\ominus' : '\U00002296',
271
+ '\\oslash' : '\U00002298',
272
+ '\\dots' : '\U00002026',
273
+ '\\cdots' : '\U000022ef',
274
+ '\\sum' : '\U00002211',
275
+ '\\prod' : '\U0000220f',
276
+ '\\coprod' : '\U00002210',
277
+ '\\infty' : '\U0000221e',
278
+ '\\int' : '\U0000222b',
279
+ '\\oint' : '\U0000222e',
280
+ '\\clubsuit' : '\U00002663',
281
+ '\\diamondsuit' : '\U00002662',
282
+ '\\heartsuit' : '\U00002661',
283
+ '\\spadesuit' : '\U00002660',
284
+ '\\aleph' : '\U00002135',
285
+ '\\emptyset' : '\U00002205',
286
+ '\\nabla' : '\U00002207',
287
+ '\\partial' : '\U00002202',
288
+ '\\flat' : '\U0000266d',
289
+ '\\natural' : '\U0000266e',
290
+ '\\sharp' : '\U0000266f',
291
+ '\\angle' : '\U00002220',
292
+ '\\copyright' : '\U000000a9',
293
+ '\\textregistered' : '\U000000ae',
294
+ '\\textonequarter' : '\U000000bc',
295
+ '\\textonehalf' : '\U000000bd',
296
+ '\\textthreequarters' : '\U000000be',
297
+ '\\textordfeminine' : '\U000000aa',
298
+ '\\textordmasculine' : '\U000000ba',
299
+ '\\euro' : '\U000020ac',
300
+ '\\pounds' : '\U000000a3',
301
+ '\\yen' : '\U000000a5',
302
+ '\\textcent' : '\U000000a2',
303
+ '\\textcurrency' : '\U000000a4',
304
+ '\\textdegree' : '\U000000b0',
305
+ }
306
+
307
+ isabelle_symbols = {
308
+ '\\<zero>' : '\U0001d7ec',
309
+ '\\<one>' : '\U0001d7ed',
310
+ '\\<two>' : '\U0001d7ee',
311
+ '\\<three>' : '\U0001d7ef',
312
+ '\\<four>' : '\U0001d7f0',
313
+ '\\<five>' : '\U0001d7f1',
314
+ '\\<six>' : '\U0001d7f2',
315
+ '\\<seven>' : '\U0001d7f3',
316
+ '\\<eight>' : '\U0001d7f4',
317
+ '\\<nine>' : '\U0001d7f5',
318
+ '\\<A>' : '\U0001d49c',
319
+ '\\<B>' : '\U0000212c',
320
+ '\\<C>' : '\U0001d49e',
321
+ '\\<D>' : '\U0001d49f',
322
+ '\\<E>' : '\U00002130',
323
+ '\\<F>' : '\U00002131',
324
+ '\\<G>' : '\U0001d4a2',
325
+ '\\<H>' : '\U0000210b',
326
+ '\\<I>' : '\U00002110',
327
+ '\\<J>' : '\U0001d4a5',
328
+ '\\<K>' : '\U0001d4a6',
329
+ '\\<L>' : '\U00002112',
330
+ '\\<M>' : '\U00002133',
331
+ '\\<N>' : '\U0001d4a9',
332
+ '\\<O>' : '\U0001d4aa',
333
+ '\\<P>' : '\U0001d4ab',
334
+ '\\<Q>' : '\U0001d4ac',
335
+ '\\<R>' : '\U0000211b',
336
+ '\\<S>' : '\U0001d4ae',
337
+ '\\<T>' : '\U0001d4af',
338
+ '\\<U>' : '\U0001d4b0',
339
+ '\\<V>' : '\U0001d4b1',
340
+ '\\<W>' : '\U0001d4b2',
341
+ '\\<X>' : '\U0001d4b3',
342
+ '\\<Y>' : '\U0001d4b4',
343
+ '\\<Z>' : '\U0001d4b5',
344
+ '\\<a>' : '\U0001d5ba',
345
+ '\\<b>' : '\U0001d5bb',
346
+ '\\<c>' : '\U0001d5bc',
347
+ '\\<d>' : '\U0001d5bd',
348
+ '\\<e>' : '\U0001d5be',
349
+ '\\<f>' : '\U0001d5bf',
350
+ '\\<g>' : '\U0001d5c0',
351
+ '\\<h>' : '\U0001d5c1',
352
+ '\\<i>' : '\U0001d5c2',
353
+ '\\<j>' : '\U0001d5c3',
354
+ '\\<k>' : '\U0001d5c4',
355
+ '\\<l>' : '\U0001d5c5',
356
+ '\\<m>' : '\U0001d5c6',
357
+ '\\<n>' : '\U0001d5c7',
358
+ '\\<o>' : '\U0001d5c8',
359
+ '\\<p>' : '\U0001d5c9',
360
+ '\\<q>' : '\U0001d5ca',
361
+ '\\<r>' : '\U0001d5cb',
362
+ '\\<s>' : '\U0001d5cc',
363
+ '\\<t>' : '\U0001d5cd',
364
+ '\\<u>' : '\U0001d5ce',
365
+ '\\<v>' : '\U0001d5cf',
366
+ '\\<w>' : '\U0001d5d0',
367
+ '\\<x>' : '\U0001d5d1',
368
+ '\\<y>' : '\U0001d5d2',
369
+ '\\<z>' : '\U0001d5d3',
370
+ '\\<AA>' : '\U0001d504',
371
+ '\\<BB>' : '\U0001d505',
372
+ '\\<CC>' : '\U0000212d',
373
+ '\\<DD>' : '\U0001d507',
374
+ '\\<EE>' : '\U0001d508',
375
+ '\\<FF>' : '\U0001d509',
376
+ '\\<GG>' : '\U0001d50a',
377
+ '\\<HH>' : '\U0000210c',
378
+ '\\<II>' : '\U00002111',
379
+ '\\<JJ>' : '\U0001d50d',
380
+ '\\<KK>' : '\U0001d50e',
381
+ '\\<LL>' : '\U0001d50f',
382
+ '\\<MM>' : '\U0001d510',
383
+ '\\<NN>' : '\U0001d511',
384
+ '\\<OO>' : '\U0001d512',
385
+ '\\<PP>' : '\U0001d513',
386
+ '\\<QQ>' : '\U0001d514',
387
+ '\\<RR>' : '\U0000211c',
388
+ '\\<SS>' : '\U0001d516',
389
+ '\\<TT>' : '\U0001d517',
390
+ '\\<UU>' : '\U0001d518',
391
+ '\\<VV>' : '\U0001d519',
392
+ '\\<WW>' : '\U0001d51a',
393
+ '\\<XX>' : '\U0001d51b',
394
+ '\\<YY>' : '\U0001d51c',
395
+ '\\<ZZ>' : '\U00002128',
396
+ '\\<aa>' : '\U0001d51e',
397
+ '\\<bb>' : '\U0001d51f',
398
+ '\\<cc>' : '\U0001d520',
399
+ '\\<dd>' : '\U0001d521',
400
+ '\\<ee>' : '\U0001d522',
401
+ '\\<ff>' : '\U0001d523',
402
+ '\\<gg>' : '\U0001d524',
403
+ '\\<hh>' : '\U0001d525',
404
+ '\\<ii>' : '\U0001d526',
405
+ '\\<jj>' : '\U0001d527',
406
+ '\\<kk>' : '\U0001d528',
407
+ '\\<ll>' : '\U0001d529',
408
+ '\\<mm>' : '\U0001d52a',
409
+ '\\<nn>' : '\U0001d52b',
410
+ '\\<oo>' : '\U0001d52c',
411
+ '\\<pp>' : '\U0001d52d',
412
+ '\\<qq>' : '\U0001d52e',
413
+ '\\<rr>' : '\U0001d52f',
414
+ '\\<ss>' : '\U0001d530',
415
+ '\\<tt>' : '\U0001d531',
416
+ '\\<uu>' : '\U0001d532',
417
+ '\\<vv>' : '\U0001d533',
418
+ '\\<ww>' : '\U0001d534',
419
+ '\\<xx>' : '\U0001d535',
420
+ '\\<yy>' : '\U0001d536',
421
+ '\\<zz>' : '\U0001d537',
422
+ '\\<alpha>' : '\U000003b1',
423
+ '\\<beta>' : '\U000003b2',
424
+ '\\<gamma>' : '\U000003b3',
425
+ '\\<delta>' : '\U000003b4',
426
+ '\\<epsilon>' : '\U000003b5',
427
+ '\\<zeta>' : '\U000003b6',
428
+ '\\<eta>' : '\U000003b7',
429
+ '\\<theta>' : '\U000003b8',
430
+ '\\<iota>' : '\U000003b9',
431
+ '\\<kappa>' : '\U000003ba',
432
+ '\\<lambda>' : '\U000003bb',
433
+ '\\<mu>' : '\U000003bc',
434
+ '\\<nu>' : '\U000003bd',
435
+ '\\<xi>' : '\U000003be',
436
+ '\\<pi>' : '\U000003c0',
437
+ '\\<rho>' : '\U000003c1',
438
+ '\\<sigma>' : '\U000003c3',
439
+ '\\<tau>' : '\U000003c4',
440
+ '\\<upsilon>' : '\U000003c5',
441
+ '\\<phi>' : '\U000003c6',
442
+ '\\<chi>' : '\U000003c7',
443
+ '\\<psi>' : '\U000003c8',
444
+ '\\<omega>' : '\U000003c9',
445
+ '\\<Gamma>' : '\U00000393',
446
+ '\\<Delta>' : '\U00000394',
447
+ '\\<Theta>' : '\U00000398',
448
+ '\\<Lambda>' : '\U0000039b',
449
+ '\\<Xi>' : '\U0000039e',
450
+ '\\<Pi>' : '\U000003a0',
451
+ '\\<Sigma>' : '\U000003a3',
452
+ '\\<Upsilon>' : '\U000003a5',
453
+ '\\<Phi>' : '\U000003a6',
454
+ '\\<Psi>' : '\U000003a8',
455
+ '\\<Omega>' : '\U000003a9',
456
+ '\\<bool>' : '\U0001d539',
457
+ '\\<complex>' : '\U00002102',
458
+ '\\<nat>' : '\U00002115',
459
+ '\\<rat>' : '\U0000211a',
460
+ '\\<real>' : '\U0000211d',
461
+ '\\<int>' : '\U00002124',
462
+ '\\<leftarrow>' : '\U00002190',
463
+ '\\<longleftarrow>' : '\U000027f5',
464
+ '\\<rightarrow>' : '\U00002192',
465
+ '\\<longrightarrow>' : '\U000027f6',
466
+ '\\<Leftarrow>' : '\U000021d0',
467
+ '\\<Longleftarrow>' : '\U000027f8',
468
+ '\\<Rightarrow>' : '\U000021d2',
469
+ '\\<Longrightarrow>' : '\U000027f9',
470
+ '\\<leftrightarrow>' : '\U00002194',
471
+ '\\<longleftrightarrow>' : '\U000027f7',
472
+ '\\<Leftrightarrow>' : '\U000021d4',
473
+ '\\<Longleftrightarrow>' : '\U000027fa',
474
+ '\\<mapsto>' : '\U000021a6',
475
+ '\\<longmapsto>' : '\U000027fc',
476
+ '\\<midarrow>' : '\U00002500',
477
+ '\\<Midarrow>' : '\U00002550',
478
+ '\\<hookleftarrow>' : '\U000021a9',
479
+ '\\<hookrightarrow>' : '\U000021aa',
480
+ '\\<leftharpoondown>' : '\U000021bd',
481
+ '\\<rightharpoondown>' : '\U000021c1',
482
+ '\\<leftharpoonup>' : '\U000021bc',
483
+ '\\<rightharpoonup>' : '\U000021c0',
484
+ '\\<rightleftharpoons>' : '\U000021cc',
485
+ '\\<leadsto>' : '\U0000219d',
486
+ '\\<downharpoonleft>' : '\U000021c3',
487
+ '\\<downharpoonright>' : '\U000021c2',
488
+ '\\<upharpoonleft>' : '\U000021bf',
489
+ '\\<upharpoonright>' : '\U000021be',
490
+ '\\<restriction>' : '\U000021be',
491
+ '\\<Colon>' : '\U00002237',
492
+ '\\<up>' : '\U00002191',
493
+ '\\<Up>' : '\U000021d1',
494
+ '\\<down>' : '\U00002193',
495
+ '\\<Down>' : '\U000021d3',
496
+ '\\<updown>' : '\U00002195',
497
+ '\\<Updown>' : '\U000021d5',
498
+ '\\<langle>' : '\U000027e8',
499
+ '\\<rangle>' : '\U000027e9',
500
+ '\\<lceil>' : '\U00002308',
501
+ '\\<rceil>' : '\U00002309',
502
+ '\\<lfloor>' : '\U0000230a',
503
+ '\\<rfloor>' : '\U0000230b',
504
+ '\\<lparr>' : '\U00002987',
505
+ '\\<rparr>' : '\U00002988',
506
+ '\\<lbrakk>' : '\U000027e6',
507
+ '\\<rbrakk>' : '\U000027e7',
508
+ '\\<lbrace>' : '\U00002983',
509
+ '\\<rbrace>' : '\U00002984',
510
+ '\\<guillemotleft>' : '\U000000ab',
511
+ '\\<guillemotright>' : '\U000000bb',
512
+ '\\<bottom>' : '\U000022a5',
513
+ '\\<top>' : '\U000022a4',
514
+ '\\<and>' : '\U00002227',
515
+ '\\<And>' : '\U000022c0',
516
+ '\\<or>' : '\U00002228',
517
+ '\\<Or>' : '\U000022c1',
518
+ '\\<forall>' : '\U00002200',
519
+ '\\<exists>' : '\U00002203',
520
+ '\\<nexists>' : '\U00002204',
521
+ '\\<not>' : '\U000000ac',
522
+ '\\<box>' : '\U000025a1',
523
+ '\\<diamond>' : '\U000025c7',
524
+ '\\<turnstile>' : '\U000022a2',
525
+ '\\<Turnstile>' : '\U000022a8',
526
+ '\\<tturnstile>' : '\U000022a9',
527
+ '\\<TTurnstile>' : '\U000022ab',
528
+ '\\<stileturn>' : '\U000022a3',
529
+ '\\<surd>' : '\U0000221a',
530
+ '\\<le>' : '\U00002264',
531
+ '\\<ge>' : '\U00002265',
532
+ '\\<lless>' : '\U0000226a',
533
+ '\\<ggreater>' : '\U0000226b',
534
+ '\\<lesssim>' : '\U00002272',
535
+ '\\<greatersim>' : '\U00002273',
536
+ '\\<lessapprox>' : '\U00002a85',
537
+ '\\<greaterapprox>' : '\U00002a86',
538
+ '\\<in>' : '\U00002208',
539
+ '\\<notin>' : '\U00002209',
540
+ '\\<subset>' : '\U00002282',
541
+ '\\<supset>' : '\U00002283',
542
+ '\\<subseteq>' : '\U00002286',
543
+ '\\<supseteq>' : '\U00002287',
544
+ '\\<sqsubset>' : '\U0000228f',
545
+ '\\<sqsupset>' : '\U00002290',
546
+ '\\<sqsubseteq>' : '\U00002291',
547
+ '\\<sqsupseteq>' : '\U00002292',
548
+ '\\<inter>' : '\U00002229',
549
+ '\\<Inter>' : '\U000022c2',
550
+ '\\<union>' : '\U0000222a',
551
+ '\\<Union>' : '\U000022c3',
552
+ '\\<squnion>' : '\U00002294',
553
+ '\\<Squnion>' : '\U00002a06',
554
+ '\\<sqinter>' : '\U00002293',
555
+ '\\<Sqinter>' : '\U00002a05',
556
+ '\\<setminus>' : '\U00002216',
557
+ '\\<propto>' : '\U0000221d',
558
+ '\\<uplus>' : '\U0000228e',
559
+ '\\<Uplus>' : '\U00002a04',
560
+ '\\<noteq>' : '\U00002260',
561
+ '\\<sim>' : '\U0000223c',
562
+ '\\<doteq>' : '\U00002250',
563
+ '\\<simeq>' : '\U00002243',
564
+ '\\<approx>' : '\U00002248',
565
+ '\\<asymp>' : '\U0000224d',
566
+ '\\<cong>' : '\U00002245',
567
+ '\\<smile>' : '\U00002323',
568
+ '\\<equiv>' : '\U00002261',
569
+ '\\<frown>' : '\U00002322',
570
+ '\\<Join>' : '\U000022c8',
571
+ '\\<bowtie>' : '\U00002a1d',
572
+ '\\<prec>' : '\U0000227a',
573
+ '\\<succ>' : '\U0000227b',
574
+ '\\<preceq>' : '\U0000227c',
575
+ '\\<succeq>' : '\U0000227d',
576
+ '\\<parallel>' : '\U00002225',
577
+ '\\<bar>' : '\U000000a6',
578
+ '\\<plusminus>' : '\U000000b1',
579
+ '\\<minusplus>' : '\U00002213',
580
+ '\\<times>' : '\U000000d7',
581
+ '\\<div>' : '\U000000f7',
582
+ '\\<cdot>' : '\U000022c5',
583
+ '\\<star>' : '\U000022c6',
584
+ '\\<bullet>' : '\U00002219',
585
+ '\\<circ>' : '\U00002218',
586
+ '\\<dagger>' : '\U00002020',
587
+ '\\<ddagger>' : '\U00002021',
588
+ '\\<lhd>' : '\U000022b2',
589
+ '\\<rhd>' : '\U000022b3',
590
+ '\\<unlhd>' : '\U000022b4',
591
+ '\\<unrhd>' : '\U000022b5',
592
+ '\\<triangleleft>' : '\U000025c3',
593
+ '\\<triangleright>' : '\U000025b9',
594
+ '\\<triangle>' : '\U000025b3',
595
+ '\\<triangleq>' : '\U0000225c',
596
+ '\\<oplus>' : '\U00002295',
597
+ '\\<Oplus>' : '\U00002a01',
598
+ '\\<otimes>' : '\U00002297',
599
+ '\\<Otimes>' : '\U00002a02',
600
+ '\\<odot>' : '\U00002299',
601
+ '\\<Odot>' : '\U00002a00',
602
+ '\\<ominus>' : '\U00002296',
603
+ '\\<oslash>' : '\U00002298',
604
+ '\\<dots>' : '\U00002026',
605
+ '\\<cdots>' : '\U000022ef',
606
+ '\\<Sum>' : '\U00002211',
607
+ '\\<Prod>' : '\U0000220f',
608
+ '\\<Coprod>' : '\U00002210',
609
+ '\\<infinity>' : '\U0000221e',
610
+ '\\<integral>' : '\U0000222b',
611
+ '\\<ointegral>' : '\U0000222e',
612
+ '\\<clubsuit>' : '\U00002663',
613
+ '\\<diamondsuit>' : '\U00002662',
614
+ '\\<heartsuit>' : '\U00002661',
615
+ '\\<spadesuit>' : '\U00002660',
616
+ '\\<aleph>' : '\U00002135',
617
+ '\\<emptyset>' : '\U00002205',
618
+ '\\<nabla>' : '\U00002207',
619
+ '\\<partial>' : '\U00002202',
620
+ '\\<flat>' : '\U0000266d',
621
+ '\\<natural>' : '\U0000266e',
622
+ '\\<sharp>' : '\U0000266f',
623
+ '\\<angle>' : '\U00002220',
624
+ '\\<copyright>' : '\U000000a9',
625
+ '\\<registered>' : '\U000000ae',
626
+ '\\<hyphen>' : '\U000000ad',
627
+ '\\<inverse>' : '\U000000af',
628
+ '\\<onequarter>' : '\U000000bc',
629
+ '\\<onehalf>' : '\U000000bd',
630
+ '\\<threequarters>' : '\U000000be',
631
+ '\\<ordfeminine>' : '\U000000aa',
632
+ '\\<ordmasculine>' : '\U000000ba',
633
+ '\\<section>' : '\U000000a7',
634
+ '\\<paragraph>' : '\U000000b6',
635
+ '\\<exclamdown>' : '\U000000a1',
636
+ '\\<questiondown>' : '\U000000bf',
637
+ '\\<euro>' : '\U000020ac',
638
+ '\\<pounds>' : '\U000000a3',
639
+ '\\<yen>' : '\U000000a5',
640
+ '\\<cent>' : '\U000000a2',
641
+ '\\<currency>' : '\U000000a4',
642
+ '\\<degree>' : '\U000000b0',
643
+ '\\<amalg>' : '\U00002a3f',
644
+ '\\<mho>' : '\U00002127',
645
+ '\\<lozenge>' : '\U000025ca',
646
+ '\\<wp>' : '\U00002118',
647
+ '\\<wrong>' : '\U00002240',
648
+ '\\<struct>' : '\U000022c4',
649
+ '\\<acute>' : '\U000000b4',
650
+ '\\<index>' : '\U00000131',
651
+ '\\<dieresis>' : '\U000000a8',
652
+ '\\<cedilla>' : '\U000000b8',
653
+ '\\<hungarumlaut>' : '\U000002dd',
654
+ '\\<some>' : '\U000003f5',
655
+ '\\<newline>' : '\U000023ce',
656
+ '\\<open>' : '\U00002039',
657
+ '\\<close>' : '\U0000203a',
658
+ '\\<here>' : '\U00002302',
659
+ '\\<^sub>' : '\U000021e9',
660
+ '\\<^sup>' : '\U000021e7',
661
+ '\\<^bold>' : '\U00002759',
662
+ '\\<^bsub>' : '\U000021d8',
663
+ '\\<^esub>' : '\U000021d9',
664
+ '\\<^bsup>' : '\U000021d7',
665
+ '\\<^esup>' : '\U000021d6',
666
+ }
667
+
668
+ lang_map = {'isabelle' : isabelle_symbols, 'latex' : latex_symbols}
669
+
670
+ def __init__(self, **options):
671
+ Filter.__init__(self, **options)
672
+ lang = get_choice_opt(options, 'lang',
673
+ ['isabelle', 'latex'], 'isabelle')
674
+ self.symbols = self.lang_map[lang]
675
+
676
+ def filter(self, lexer, stream):
677
+ for ttype, value in stream:
678
+ if value in self.symbols:
679
+ yield ttype, self.symbols[value]
680
+ else:
681
+ yield ttype, value
682
+
683
+
684
+ class KeywordCaseFilter(Filter):
685
+ """Convert keywords to lowercase or uppercase or capitalize them, which
686
+ means first letter uppercase, rest lowercase.
687
+
688
+ This can be useful e.g. if you highlight Pascal code and want to adapt the
689
+ code to your styleguide.
690
+
691
+ Options accepted:
692
+
693
+ `case` : string
694
+ The casing to convert keywords to. Must be one of ``'lower'``,
695
+ ``'upper'`` or ``'capitalize'``. The default is ``'lower'``.
696
+ """
697
+
698
+ def __init__(self, **options):
699
+ Filter.__init__(self, **options)
700
+ case = get_choice_opt(options, 'case',
701
+ ['lower', 'upper', 'capitalize'], 'lower')
702
+ self.convert = getattr(str, case)
703
+
704
+ def filter(self, lexer, stream):
705
+ for ttype, value in stream:
706
+ if ttype in Keyword:
707
+ yield ttype, self.convert(value)
708
+ else:
709
+ yield ttype, value
710
+
711
+
712
+ class NameHighlightFilter(Filter):
713
+ """Highlight a normal Name (and Name.*) token with a different token type.
714
+
715
+ Example::
716
+
717
+ filter = NameHighlightFilter(
718
+ names=['foo', 'bar', 'baz'],
719
+ tokentype=Name.Function,
720
+ )
721
+
722
+ This would highlight the names "foo", "bar" and "baz"
723
+ as functions. `Name.Function` is the default token type.
724
+
725
+ Options accepted:
726
+
727
+ `names` : list of strings
728
+ A list of names that should be given the different token type.
729
+ There is no default.
730
+ `tokentype` : TokenType or string
731
+ A token type or a string containing a token type name that is
732
+ used for highlighting the strings in `names`. The default is
733
+ `Name.Function`.
734
+ """
735
+
736
+ def __init__(self, **options):
737
+ Filter.__init__(self, **options)
738
+ self.names = set(get_list_opt(options, 'names', []))
739
+ tokentype = options.get('tokentype')
740
+ if tokentype:
741
+ self.tokentype = string_to_tokentype(tokentype)
742
+ else:
743
+ self.tokentype = Name.Function
744
+
745
+ def filter(self, lexer, stream):
746
+ for ttype, value in stream:
747
+ if ttype in Name and value in self.names:
748
+ yield self.tokentype, value
749
+ else:
750
+ yield ttype, value
751
+
752
+
753
+ class ErrorToken(Exception):
754
+ pass
755
+
756
+
757
+ class RaiseOnErrorTokenFilter(Filter):
758
+ """Raise an exception when the lexer generates an error token.
759
+
760
+ Options accepted:
761
+
762
+ `excclass` : Exception class
763
+ The exception class to raise.
764
+ The default is `pygments.filters.ErrorToken`.
765
+
766
+ .. versionadded:: 0.8
767
+ """
768
+
769
+ def __init__(self, **options):
770
+ Filter.__init__(self, **options)
771
+ self.exception = options.get('excclass', ErrorToken)
772
+ try:
773
+ # issubclass() will raise TypeError if first argument is not a class
774
+ if not issubclass(self.exception, Exception):
775
+ raise TypeError
776
+ except TypeError:
777
+ raise OptionError('excclass option is not an exception class')
778
+
779
+ def filter(self, lexer, stream):
780
+ for ttype, value in stream:
781
+ if ttype is Error:
782
+ raise self.exception(value)
783
+ yield ttype, value
784
+
785
+
786
+ class VisibleWhitespaceFilter(Filter):
787
+ """Convert tabs, newlines and/or spaces to visible characters.
788
+
789
+ Options accepted:
790
+
791
+ `spaces` : string or bool
792
+ If this is a one-character string, spaces will be replaces by this string.
793
+ If it is another true value, spaces will be replaced by ``·`` (unicode
794
+ MIDDLE DOT). If it is a false value, spaces will not be replaced. The
795
+ default is ``False``.
796
+ `tabs` : string or bool
797
+ The same as for `spaces`, but the default replacement character is ``»``
798
+ (unicode RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK). The default value
799
+ is ``False``. Note: this will not work if the `tabsize` option for the
800
+ lexer is nonzero, as tabs will already have been expanded then.
801
+ `tabsize` : int
802
+ If tabs are to be replaced by this filter (see the `tabs` option), this
803
+ is the total number of characters that a tab should be expanded to.
804
+ The default is ``8``.
805
+ `newlines` : string or bool
806
+ The same as for `spaces`, but the default replacement character is ``¶``
807
+ (unicode PILCROW SIGN). The default value is ``False``.
808
+ `wstokentype` : bool
809
+ If true, give whitespace the special `Whitespace` token type. This allows
810
+ styling the visible whitespace differently (e.g. greyed out), but it can
811
+ disrupt background colors. The default is ``True``.
812
+
813
+ .. versionadded:: 0.8
814
+ """
815
+
816
+ def __init__(self, **options):
817
+ Filter.__init__(self, **options)
818
+ for name, default in [('spaces', '·'),
819
+ ('tabs', '»'),
820
+ ('newlines', '¶')]:
821
+ opt = options.get(name, False)
822
+ if isinstance(opt, str) and len(opt) == 1:
823
+ setattr(self, name, opt)
824
+ else:
825
+ setattr(self, name, (opt and default or ''))
826
+ tabsize = get_int_opt(options, 'tabsize', 8)
827
+ if self.tabs:
828
+ self.tabs += ' ' * (tabsize - 1)
829
+ if self.newlines:
830
+ self.newlines += '\n'
831
+ self.wstt = get_bool_opt(options, 'wstokentype', True)
832
+
833
+ def filter(self, lexer, stream):
834
+ if self.wstt:
835
+ spaces = self.spaces or ' '
836
+ tabs = self.tabs or '\t'
837
+ newlines = self.newlines or '\n'
838
+ regex = re.compile(r'\s')
839
+
840
+ def replacefunc(wschar):
841
+ if wschar == ' ':
842
+ return spaces
843
+ elif wschar == '\t':
844
+ return tabs
845
+ elif wschar == '\n':
846
+ return newlines
847
+ return wschar
848
+
849
+ for ttype, value in stream:
850
+ yield from _replace_special(ttype, value, regex, Whitespace,
851
+ replacefunc)
852
+ else:
853
+ spaces, tabs, newlines = self.spaces, self.tabs, self.newlines
854
+ # simpler processing
855
+ for ttype, value in stream:
856
+ if spaces:
857
+ value = value.replace(' ', spaces)
858
+ if tabs:
859
+ value = value.replace('\t', tabs)
860
+ if newlines:
861
+ value = value.replace('\n', newlines)
862
+ yield ttype, value
863
+
864
+
865
+ class GobbleFilter(Filter):
866
+ """Gobbles source code lines (eats initial characters).
867
+
868
+ This filter drops the first ``n`` characters off every line of code. This
869
+ may be useful when the source code fed to the lexer is indented by a fixed
870
+ amount of space that isn't desired in the output.
871
+
872
+ Options accepted:
873
+
874
+ `n` : int
875
+ The number of characters to gobble.
876
+
877
+ .. versionadded:: 1.2
878
+ """
879
+ def __init__(self, **options):
880
+ Filter.__init__(self, **options)
881
+ self.n = get_int_opt(options, 'n', 0)
882
+
883
+ def gobble(self, value, left):
884
+ if left < len(value):
885
+ return value[left:], 0
886
+ else:
887
+ return '', left - len(value)
888
+
889
+ def filter(self, lexer, stream):
890
+ n = self.n
891
+ left = n # How many characters left to gobble.
892
+ for ttype, value in stream:
893
+ # Remove ``left`` tokens from first line, ``n`` from all others.
894
+ parts = value.split('\n')
895
+ (parts[0], left) = self.gobble(parts[0], left)
896
+ for i in range(1, len(parts)):
897
+ (parts[i], left) = self.gobble(parts[i], n)
898
+ value = '\n'.join(parts)
899
+
900
+ if value != '':
901
+ yield ttype, value
902
+
903
+
904
+ class TokenMergeFilter(Filter):
905
+ """Merges consecutive tokens with the same token type in the output
906
+ stream of a lexer.
907
+
908
+ .. versionadded:: 1.2
909
+ """
910
+ def __init__(self, **options):
911
+ Filter.__init__(self, **options)
912
+
913
+ def filter(self, lexer, stream):
914
+ current_type = None
915
+ current_value = None
916
+ for ttype, value in stream:
917
+ if ttype is current_type:
918
+ current_value += value
919
+ else:
920
+ if current_type is not None:
921
+ yield current_type, current_value
922
+ current_type = ttype
923
+ current_value = value
924
+ if current_type is not None:
925
+ yield current_type, current_value
926
+
927
+
928
+ FILTERS = {
929
+ 'codetagify': CodeTagFilter,
930
+ 'keywordcase': KeywordCaseFilter,
931
+ 'highlight': NameHighlightFilter,
932
+ 'raiseonerror': RaiseOnErrorTokenFilter,
933
+ 'whitespace': VisibleWhitespaceFilter,
934
+ 'gobble': GobbleFilter,
935
+ 'tokenmerge': TokenMergeFilter,
936
+ 'symbols': SymbolFilter,
937
+ }
venv/lib/python3.10/site-packages/pip/_vendor/pygments/filters/__pycache__/__init__.cpython-310.pyc ADDED
Binary file (29.6 kB). View file
 
venv/lib/python3.10/site-packages/pip/_vendor/pygments/formatters/__init__.py ADDED
@@ -0,0 +1,153 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.formatters
3
+ ~~~~~~~~~~~~~~~~~~~
4
+
5
+ Pygments formatters.
6
+
7
+ :copyright: Copyright 2006-2021 by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ import re
12
+ import sys
13
+ import types
14
+ import fnmatch
15
+ from os.path import basename
16
+
17
+ from pip._vendor.pygments.formatters._mapping import FORMATTERS
18
+ from pip._vendor.pygments.plugin import find_plugin_formatters
19
+ from pip._vendor.pygments.util import ClassNotFound
20
+
21
+ __all__ = ['get_formatter_by_name', 'get_formatter_for_filename',
22
+ 'get_all_formatters', 'load_formatter_from_file'] + list(FORMATTERS)
23
+
24
+ _formatter_cache = {} # classes by name
25
+ _pattern_cache = {}
26
+
27
+
28
+ def _fn_matches(fn, glob):
29
+ """Return whether the supplied file name fn matches pattern filename."""
30
+ if glob not in _pattern_cache:
31
+ pattern = _pattern_cache[glob] = re.compile(fnmatch.translate(glob))
32
+ return pattern.match(fn)
33
+ return _pattern_cache[glob].match(fn)
34
+
35
+
36
+ def _load_formatters(module_name):
37
+ """Load a formatter (and all others in the module too)."""
38
+ mod = __import__(module_name, None, None, ['__all__'])
39
+ for formatter_name in mod.__all__:
40
+ cls = getattr(mod, formatter_name)
41
+ _formatter_cache[cls.name] = cls
42
+
43
+
44
+ def get_all_formatters():
45
+ """Return a generator for all formatter classes."""
46
+ # NB: this returns formatter classes, not info like get_all_lexers().
47
+ for info in FORMATTERS.values():
48
+ if info[1] not in _formatter_cache:
49
+ _load_formatters(info[0])
50
+ yield _formatter_cache[info[1]]
51
+ for _, formatter in find_plugin_formatters():
52
+ yield formatter
53
+
54
+
55
+ def find_formatter_class(alias):
56
+ """Lookup a formatter by alias.
57
+
58
+ Returns None if not found.
59
+ """
60
+ for module_name, name, aliases, _, _ in FORMATTERS.values():
61
+ if alias in aliases:
62
+ if name not in _formatter_cache:
63
+ _load_formatters(module_name)
64
+ return _formatter_cache[name]
65
+ for _, cls in find_plugin_formatters():
66
+ if alias in cls.aliases:
67
+ return cls
68
+
69
+
70
+ def get_formatter_by_name(_alias, **options):
71
+ """Lookup and instantiate a formatter by alias.
72
+
73
+ Raises ClassNotFound if not found.
74
+ """
75
+ cls = find_formatter_class(_alias)
76
+ if cls is None:
77
+ raise ClassNotFound("no formatter found for name %r" % _alias)
78
+ return cls(**options)
79
+
80
+
81
+ def load_formatter_from_file(filename, formattername="CustomFormatter",
82
+ **options):
83
+ """Load a formatter from a file.
84
+
85
+ This method expects a file located relative to the current working
86
+ directory, which contains a class named CustomFormatter. By default,
87
+ it expects the Formatter to be named CustomFormatter; you can specify
88
+ your own class name as the second argument to this function.
89
+
90
+ Users should be very careful with the input, because this method
91
+ is equivalent to running eval on the input file.
92
+
93
+ Raises ClassNotFound if there are any problems importing the Formatter.
94
+
95
+ .. versionadded:: 2.2
96
+ """
97
+ try:
98
+ # This empty dict will contain the namespace for the exec'd file
99
+ custom_namespace = {}
100
+ with open(filename, 'rb') as f:
101
+ exec(f.read(), custom_namespace)
102
+ # Retrieve the class `formattername` from that namespace
103
+ if formattername not in custom_namespace:
104
+ raise ClassNotFound('no valid %s class found in %s' %
105
+ (formattername, filename))
106
+ formatter_class = custom_namespace[formattername]
107
+ # And finally instantiate it with the options
108
+ return formatter_class(**options)
109
+ except OSError as err:
110
+ raise ClassNotFound('cannot read %s: %s' % (filename, err))
111
+ except ClassNotFound:
112
+ raise
113
+ except Exception as err:
114
+ raise ClassNotFound('error when loading custom formatter: %s' % err)
115
+
116
+
117
+ def get_formatter_for_filename(fn, **options):
118
+ """Lookup and instantiate a formatter by filename pattern.
119
+
120
+ Raises ClassNotFound if not found.
121
+ """
122
+ fn = basename(fn)
123
+ for modname, name, _, filenames, _ in FORMATTERS.values():
124
+ for filename in filenames:
125
+ if _fn_matches(fn, filename):
126
+ if name not in _formatter_cache:
127
+ _load_formatters(modname)
128
+ return _formatter_cache[name](**options)
129
+ for cls in find_plugin_formatters():
130
+ for filename in cls.filenames:
131
+ if _fn_matches(fn, filename):
132
+ return cls(**options)
133
+ raise ClassNotFound("no formatter found for file name %r" % fn)
134
+
135
+
136
+ class _automodule(types.ModuleType):
137
+ """Automatically import formatters."""
138
+
139
+ def __getattr__(self, name):
140
+ info = FORMATTERS.get(name)
141
+ if info:
142
+ _load_formatters(info[0])
143
+ cls = _formatter_cache[info[1]]
144
+ setattr(self, name, cls)
145
+ return cls
146
+ raise AttributeError(name)
147
+
148
+
149
+ oldmod = sys.modules[__name__]
150
+ newmod = _automodule(__name__)
151
+ newmod.__dict__.update(oldmod.__dict__)
152
+ sys.modules[__name__] = newmod
153
+ del newmod.newmod, newmod.oldmod, newmod.sys, newmod.types
venv/lib/python3.10/site-packages/pip/_vendor/pygments/formatters/__pycache__/__init__.cpython-310.pyc ADDED
Binary file (4.77 kB). View file
 
venv/lib/python3.10/site-packages/pip/_vendor/pygments/formatters/__pycache__/_mapping.cpython-310.pyc ADDED
Binary file (5.63 kB). View file
 
venv/lib/python3.10/site-packages/pip/_vendor/pygments/formatters/__pycache__/bbcode.cpython-310.pyc ADDED
Binary file (3.18 kB). View file
 
venv/lib/python3.10/site-packages/pip/_vendor/pygments/formatters/__pycache__/groff.cpython-310.pyc ADDED
Binary file (4.46 kB). View file
 
venv/lib/python3.10/site-packages/pip/_vendor/pygments/formatters/__pycache__/html.cpython-310.pyc ADDED
Binary file (29.2 kB). View file
 
venv/lib/python3.10/site-packages/pip/_vendor/pygments/formatters/__pycache__/img.cpython-310.pyc ADDED
Binary file (17.6 kB). View file
 
venv/lib/python3.10/site-packages/pip/_vendor/pygments/formatters/__pycache__/irc.cpython-310.pyc ADDED
Binary file (4.69 kB). View file
 
venv/lib/python3.10/site-packages/pip/_vendor/pygments/formatters/__pycache__/latex.cpython-310.pyc ADDED
Binary file (13.6 kB). View file
 
venv/lib/python3.10/site-packages/pip/_vendor/pygments/formatters/__pycache__/other.cpython-310.pyc ADDED
Binary file (4.9 kB). View file
 
venv/lib/python3.10/site-packages/pip/_vendor/pygments/formatters/__pycache__/pangomarkup.cpython-310.pyc ADDED
Binary file (2.2 kB). View file
 
venv/lib/python3.10/site-packages/pip/_vendor/pygments/formatters/__pycache__/rtf.cpython-310.pyc ADDED
Binary file (4.23 kB). View file
 
venv/lib/python3.10/site-packages/pip/_vendor/pygments/formatters/__pycache__/svg.cpython-310.pyc ADDED
Binary file (6.43 kB). View file
 
venv/lib/python3.10/site-packages/pip/_vendor/pygments/formatters/__pycache__/terminal.cpython-310.pyc ADDED
Binary file (4.1 kB). View file
 
venv/lib/python3.10/site-packages/pip/_vendor/pygments/formatters/__pycache__/terminal256.cpython-310.pyc ADDED
Binary file (9.35 kB). View file
 
venv/lib/python3.10/site-packages/pip/_vendor/pygments/formatters/_mapping.py ADDED
@@ -0,0 +1,84 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.formatters._mapping
3
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Formatter mapping definitions. This file is generated by itself. Everytime
6
+ you change something on a builtin formatter definition, run this script from
7
+ the formatters folder to update it.
8
+
9
+ Do not alter the FORMATTERS dictionary by hand.
10
+
11
+ :copyright: Copyright 2006-2021 by the Pygments team, see AUTHORS.
12
+ :license: BSD, see LICENSE for details.
13
+ """
14
+
15
+ FORMATTERS = {
16
+ '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.'),
17
+ 'BmpImageFormatter': ('pygments.formatters.img', 'img_bmp', ('bmp', 'bitmap'), ('*.bmp',), 'Create a bitmap image from source code. This uses the Python Imaging Library to generate a pixmap from the source code.'),
18
+ 'GifImageFormatter': ('pygments.formatters.img', 'img_gif', ('gif',), ('*.gif',), 'Create a GIF image from source code. This uses the Python Imaging Library to generate a pixmap from the source code.'),
19
+ 'GroffFormatter': ('pygments.formatters.groff', 'groff', ('groff', 'troff', 'roff'), (), 'Format tokens with groff escapes to change their color and font style.'),
20
+ 'HtmlFormatter': ('pygments.formatters.html', 'HTML', ('html',), ('*.html', '*.htm'), "Format tokens as HTML 4 ``<span>`` tags within a ``<pre>`` tag, wrapped in a ``<div>`` tag. The ``<div>``'s CSS class can be set by the `cssclass` option."),
21
+ 'IRCFormatter': ('pygments.formatters.irc', 'IRC', ('irc', 'IRC'), (), 'Format tokens with IRC color sequences'),
22
+ 'ImageFormatter': ('pygments.formatters.img', 'img', ('img', 'IMG', 'png'), ('*.png',), 'Create a PNG image from source code. This uses the Python Imaging Library to generate a pixmap from the source code.'),
23
+ 'JpgImageFormatter': ('pygments.formatters.img', 'img_jpg', ('jpg', 'jpeg'), ('*.jpg',), 'Create a JPEG image from source code. This uses the Python Imaging Library to generate a pixmap from the source code.'),
24
+ 'LatexFormatter': ('pygments.formatters.latex', 'LaTeX', ('latex', 'tex'), ('*.tex',), 'Format tokens as LaTeX code. This needs the `fancyvrb` and `color` standard packages.'),
25
+ 'NullFormatter': ('pygments.formatters.other', 'Text only', ('text', 'null'), ('*.txt',), 'Output the text unchanged without any formatting.'),
26
+ 'PangoMarkupFormatter': ('pygments.formatters.pangomarkup', 'Pango Markup', ('pango', 'pangomarkup'), (), 'Format tokens as Pango Markup code. It can then be rendered to an SVG.'),
27
+ 'RawTokenFormatter': ('pygments.formatters.other', 'Raw tokens', ('raw', 'tokens'), ('*.raw',), 'Format tokens as a raw representation for storing token streams.'),
28
+ 'RtfFormatter': ('pygments.formatters.rtf', 'RTF', ('rtf',), ('*.rtf',), 'Format tokens as RTF markup. This formatter automatically outputs full RTF documents with color information and other useful stuff. Perfect for Copy and Paste into Microsoft(R) Word(R) documents.'),
29
+ 'SvgFormatter': ('pygments.formatters.svg', 'SVG', ('svg',), ('*.svg',), 'Format tokens as an SVG graphics file. This formatter is still experimental. Each line of code is a ``<text>`` element with explicit ``x`` and ``y`` coordinates containing ``<tspan>`` elements with the individual token styles.'),
30
+ '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.'),
31
+ '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.'),
32
+ '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.'),
33
+ 'TestcaseFormatter': ('pygments.formatters.other', 'Testcase', ('testcase',), (), 'Format tokens as appropriate for a new testcase.')
34
+ }
35
+
36
+ if __name__ == '__main__': # pragma: no cover
37
+ import sys
38
+ import os
39
+
40
+ # lookup formatters
41
+ found_formatters = []
42
+ imports = []
43
+ sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', '..'))
44
+ from pip._vendor.pygments.util import docstring_headline
45
+
46
+ for root, dirs, files in os.walk('.'):
47
+ for filename in files:
48
+ if filename.endswith('.py') and not filename.startswith('_'):
49
+ module_name = 'pygments.formatters%s.%s' % (
50
+ root[1:].replace('/', '.'), filename[:-3])
51
+ print(module_name)
52
+ module = __import__(module_name, None, None, [''])
53
+ for formatter_name in module.__all__:
54
+ formatter = getattr(module, formatter_name)
55
+ found_formatters.append(
56
+ '%r: %r' % (formatter_name,
57
+ (module_name,
58
+ formatter.name,
59
+ tuple(formatter.aliases),
60
+ tuple(formatter.filenames),
61
+ docstring_headline(formatter))))
62
+ # sort them to make the diff minimal
63
+ found_formatters.sort()
64
+
65
+ # extract useful sourcecode from this file
66
+ with open(__file__) as fp:
67
+ content = fp.read()
68
+ # replace crnl to nl for Windows.
69
+ #
70
+ # Note that, originally, contributers should keep nl of master
71
+ # repository, for example by using some kind of automatic
72
+ # management EOL, like `EolExtension
73
+ # <https://www.mercurial-scm.org/wiki/EolExtension>`.
74
+ content = content.replace("\r\n", "\n")
75
+ header = content[:content.find('FORMATTERS = {')]
76
+ footer = content[content.find("if __name__ == '__main__':"):]
77
+
78
+ # write new file
79
+ with open(__file__, 'w') as fp:
80
+ fp.write(header)
81
+ fp.write('FORMATTERS = {\n %s\n}\n\n' % ',\n '.join(found_formatters))
82
+ fp.write(footer)
83
+
84
+ print ('=== %d formatters processed.' % len(found_formatters))
venv/lib/python3.10/site-packages/pip/_vendor/pygments/formatters/bbcode.py ADDED
@@ -0,0 +1,108 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.formatters.bbcode
3
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~
4
+
5
+ BBcode formatter.
6
+
7
+ :copyright: Copyright 2006-2021 by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+
12
+ from pip._vendor.pygments.formatter import Formatter
13
+ from pip._vendor.pygments.util import get_bool_opt
14
+
15
+ __all__ = ['BBCodeFormatter']
16
+
17
+
18
+ class BBCodeFormatter(Formatter):
19
+ """
20
+ Format tokens with BBcodes. These formatting codes are used by many
21
+ bulletin boards, so you can highlight your sourcecode with pygments before
22
+ posting it there.
23
+
24
+ This formatter has no support for background colors and borders, as there
25
+ are no common BBcode tags for that.
26
+
27
+ Some board systems (e.g. phpBB) don't support colors in their [code] tag,
28
+ so you can't use the highlighting together with that tag.
29
+ Text in a [code] tag usually is shown with a monospace font (which this
30
+ formatter can do with the ``monofont`` option) and no spaces (which you
31
+ need for indentation) are removed.
32
+
33
+ Additional options accepted:
34
+
35
+ `style`
36
+ The style to use, can be a string or a Style subclass (default:
37
+ ``'default'``).
38
+
39
+ `codetag`
40
+ If set to true, put the output into ``[code]`` tags (default:
41
+ ``false``)
42
+
43
+ `monofont`
44
+ If set to true, add a tag to show the code with a monospace font
45
+ (default: ``false``).
46
+ """
47
+ name = 'BBCode'
48
+ aliases = ['bbcode', 'bb']
49
+ filenames = []
50
+
51
+ def __init__(self, **options):
52
+ Formatter.__init__(self, **options)
53
+ self._code = get_bool_opt(options, 'codetag', False)
54
+ self._mono = get_bool_opt(options, 'monofont', False)
55
+
56
+ self.styles = {}
57
+ self._make_styles()
58
+
59
+ def _make_styles(self):
60
+ for ttype, ndef in self.style:
61
+ start = end = ''
62
+ if ndef['color']:
63
+ start += '[color=#%s]' % ndef['color']
64
+ end = '[/color]' + end
65
+ if ndef['bold']:
66
+ start += '[b]'
67
+ end = '[/b]' + end
68
+ if ndef['italic']:
69
+ start += '[i]'
70
+ end = '[/i]' + end
71
+ if ndef['underline']:
72
+ start += '[u]'
73
+ end = '[/u]' + end
74
+ # there are no common BBcodes for background-color and border
75
+
76
+ self.styles[ttype] = start, end
77
+
78
+ def format_unencoded(self, tokensource, outfile):
79
+ if self._code:
80
+ outfile.write('[code]')
81
+ if self._mono:
82
+ outfile.write('[font=monospace]')
83
+
84
+ lastval = ''
85
+ lasttype = None
86
+
87
+ for ttype, value in tokensource:
88
+ while ttype not in self.styles:
89
+ ttype = ttype.parent
90
+ if ttype == lasttype:
91
+ lastval += value
92
+ else:
93
+ if lastval:
94
+ start, end = self.styles[lasttype]
95
+ outfile.write(''.join((start, lastval, end)))
96
+ lastval = value
97
+ lasttype = ttype
98
+
99
+ if lastval:
100
+ start, end = self.styles[lasttype]
101
+ outfile.write(''.join((start, lastval, end)))
102
+
103
+ if self._mono:
104
+ outfile.write('[/font]')
105
+ if self._code:
106
+ outfile.write('[/code]')
107
+ if self._code or self._mono:
108
+ outfile.write('\n')
venv/lib/python3.10/site-packages/pip/_vendor/pygments/formatters/groff.py ADDED
@@ -0,0 +1,168 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.formatters.groff
3
+ ~~~~~~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Formatter for groff output.
6
+
7
+ :copyright: Copyright 2006-2021 by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ import math
12
+ from pip._vendor.pygments.formatter import Formatter
13
+ from pip._vendor.pygments.util import get_bool_opt, get_int_opt
14
+
15
+ __all__ = ['GroffFormatter']
16
+
17
+
18
+ class GroffFormatter(Formatter):
19
+ """
20
+ Format tokens with groff escapes to change their color and font style.
21
+
22
+ .. versionadded:: 2.11
23
+
24
+ Additional options accepted:
25
+
26
+ `style`
27
+ The style to use, can be a string or a Style subclass (default:
28
+ ``'default'``).
29
+
30
+ `monospaced`
31
+ If set to true, monospace font will be used (default: ``true``).
32
+
33
+ `linenos`
34
+ If set to true, print the line numbers (default: ``false``).
35
+
36
+ `wrap`
37
+ Wrap lines to the specified number of characters. Disabled if set to 0
38
+ (default: ``0``).
39
+ """
40
+
41
+ name = 'groff'
42
+ aliases = ['groff','troff','roff']
43
+ filenames = []
44
+
45
+ def __init__(self, **options):
46
+ Formatter.__init__(self, **options)
47
+
48
+ self.monospaced = get_bool_opt(options, 'monospaced', True)
49
+ self.linenos = get_bool_opt(options, 'linenos', False)
50
+ self._lineno = 0
51
+ self.wrap = get_int_opt(options, 'wrap', 0)
52
+ self._linelen = 0
53
+
54
+ self.styles = {}
55
+ self._make_styles()
56
+
57
+
58
+ def _make_styles(self):
59
+ regular = '\\f[CR]' if self.monospaced else '\\f[R]'
60
+ bold = '\\f[CB]' if self.monospaced else '\\f[B]'
61
+ italic = '\\f[CI]' if self.monospaced else '\\f[I]'
62
+
63
+ for ttype, ndef in self.style:
64
+ start = end = ''
65
+ if ndef['color']:
66
+ start += '\\m[%s]' % ndef['color']
67
+ end = '\\m[]' + end
68
+ if ndef['bold']:
69
+ start += bold
70
+ end = regular + end
71
+ if ndef['italic']:
72
+ start += italic
73
+ end = regular + end
74
+ if ndef['bgcolor']:
75
+ start += '\\M[%s]' % ndef['bgcolor']
76
+ end = '\\M[]' + end
77
+
78
+ self.styles[ttype] = start, end
79
+
80
+
81
+ def _define_colors(self, outfile):
82
+ colors = set()
83
+ for _, ndef in self.style:
84
+ if ndef['color'] is not None:
85
+ colors.add(ndef['color'])
86
+
87
+ for color in colors:
88
+ outfile.write('.defcolor ' + color + ' rgb #' + color + '\n')
89
+
90
+
91
+ def _write_lineno(self, outfile):
92
+ self._lineno += 1
93
+ outfile.write("%s% 4d " % (self._lineno != 1 and '\n' or '', self._lineno))
94
+
95
+
96
+ def _wrap_line(self, line):
97
+ length = len(line.rstrip('\n'))
98
+ space = ' ' if self.linenos else ''
99
+ newline = ''
100
+
101
+ if length > self.wrap:
102
+ for i in range(0, math.floor(length / self.wrap)):
103
+ chunk = line[i*self.wrap:i*self.wrap+self.wrap]
104
+ newline += (chunk + '\n' + space)
105
+ remainder = length % self.wrap
106
+ if remainder > 0:
107
+ newline += line[-remainder-1:]
108
+ self._linelen = remainder
109
+ elif self._linelen + length > self.wrap:
110
+ newline = ('\n' + space) + line
111
+ self._linelen = length
112
+ else:
113
+ newline = line
114
+ self._linelen += length
115
+
116
+ return newline
117
+
118
+
119
+ def _escape_chars(self, text):
120
+ text = text.replace('\\', '\\[u005C]'). \
121
+ replace('.', '\\[char46]'). \
122
+ replace('\'', '\\[u0027]'). \
123
+ replace('`', '\\[u0060]'). \
124
+ replace('~', '\\[u007E]')
125
+ copy = text
126
+
127
+ for char in copy:
128
+ if len(char) != len(char.encode()):
129
+ uni = char.encode('unicode_escape') \
130
+ .decode()[1:] \
131
+ .replace('x', 'u00') \
132
+ .upper()
133
+ text = text.replace(char, '\\[u' + uni[1:] + ']')
134
+
135
+ return text
136
+
137
+
138
+ def format_unencoded(self, tokensource, outfile):
139
+ self._define_colors(outfile)
140
+
141
+ outfile.write('.nf\n\\f[CR]\n')
142
+
143
+ if self.linenos:
144
+ self._write_lineno(outfile)
145
+
146
+ for ttype, value in tokensource:
147
+ start, end = self.styles[ttype]
148
+
149
+ for line in value.splitlines(True):
150
+ if self.wrap > 0:
151
+ line = self._wrap_line(line)
152
+
153
+ if start and end:
154
+ text = self._escape_chars(line.rstrip('\n'))
155
+ if text != '':
156
+ outfile.write(''.join((start, text, end)))
157
+ else:
158
+ outfile.write(self._escape_chars(line.rstrip('\n')))
159
+
160
+ if line.endswith('\n'):
161
+ if self.linenos:
162
+ self._write_lineno(outfile)
163
+ self._linelen = 0
164
+ else:
165
+ outfile.write('\n')
166
+ self._linelen = 0
167
+
168
+ outfile.write('\n.fi')
venv/lib/python3.10/site-packages/pip/_vendor/pygments/formatters/html.py ADDED
@@ -0,0 +1,983 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.formatters.html
3
+ ~~~~~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Formatter for HTML output.
6
+
7
+ :copyright: Copyright 2006-2021 by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ import functools
12
+ import os
13
+ import sys
14
+ import os.path
15
+ from io import StringIO
16
+
17
+ from pip._vendor.pygments.formatter import Formatter
18
+ from pip._vendor.pygments.token import Token, Text, STANDARD_TYPES
19
+ from pip._vendor.pygments.util import get_bool_opt, get_int_opt, get_list_opt
20
+
21
+ try:
22
+ import ctags
23
+ except ImportError:
24
+ ctags = None
25
+
26
+ __all__ = ['HtmlFormatter']
27
+
28
+
29
+ _escape_html_table = {
30
+ ord('&'): '&amp;',
31
+ ord('<'): '&lt;',
32
+ ord('>'): '&gt;',
33
+ ord('"'): '&quot;',
34
+ ord("'"): '&#39;',
35
+ }
36
+
37
+
38
+ def escape_html(text, table=_escape_html_table):
39
+ """Escape &, <, > as well as single and double quotes for HTML."""
40
+ return text.translate(table)
41
+
42
+
43
+ def webify(color):
44
+ if color.startswith('calc') or color.startswith('var'):
45
+ return color
46
+ else:
47
+ return '#' + color
48
+
49
+
50
+ def _get_ttype_class(ttype):
51
+ fname = STANDARD_TYPES.get(ttype)
52
+ if fname:
53
+ return fname
54
+ aname = ''
55
+ while fname is None:
56
+ aname = '-' + ttype[-1] + aname
57
+ ttype = ttype.parent
58
+ fname = STANDARD_TYPES.get(ttype)
59
+ return fname + aname
60
+
61
+
62
+ CSSFILE_TEMPLATE = '''\
63
+ /*
64
+ generated by Pygments <https://pygments.org/>
65
+ Copyright 2006-2021 by the Pygments team.
66
+ Licensed under the BSD license, see LICENSE for details.
67
+ */
68
+ %(styledefs)s
69
+ '''
70
+
71
+ DOC_HEADER = '''\
72
+ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
73
+ "http://www.w3.org/TR/html4/strict.dtd">
74
+ <!--
75
+ generated by Pygments <https://pygments.org/>
76
+ Copyright 2006-2021 by the Pygments team.
77
+ Licensed under the BSD license, see LICENSE for details.
78
+ -->
79
+ <html>
80
+ <head>
81
+ <title>%(title)s</title>
82
+ <meta http-equiv="content-type" content="text/html; charset=%(encoding)s">
83
+ <style type="text/css">
84
+ ''' + CSSFILE_TEMPLATE + '''
85
+ </style>
86
+ </head>
87
+ <body>
88
+ <h2>%(title)s</h2>
89
+
90
+ '''
91
+
92
+ DOC_HEADER_EXTERNALCSS = '''\
93
+ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
94
+ "http://www.w3.org/TR/html4/strict.dtd">
95
+
96
+ <html>
97
+ <head>
98
+ <title>%(title)s</title>
99
+ <meta http-equiv="content-type" content="text/html; charset=%(encoding)s">
100
+ <link rel="stylesheet" href="%(cssfile)s" type="text/css">
101
+ </head>
102
+ <body>
103
+ <h2>%(title)s</h2>
104
+
105
+ '''
106
+
107
+ DOC_FOOTER = '''\
108
+ </body>
109
+ </html>
110
+ '''
111
+
112
+
113
+ class HtmlFormatter(Formatter):
114
+ r"""
115
+ Format tokens as HTML 4 ``<span>`` tags within a ``<pre>`` tag, wrapped
116
+ in a ``<div>`` tag. The ``<div>``'s CSS class can be set by the `cssclass`
117
+ option.
118
+
119
+ If the `linenos` option is set to ``"table"``, the ``<pre>`` is
120
+ additionally wrapped inside a ``<table>`` which has one row and two
121
+ cells: one containing the line numbers and one containing the code.
122
+ Example:
123
+
124
+ .. sourcecode:: html
125
+
126
+ <div class="highlight" >
127
+ <table><tr>
128
+ <td class="linenos" title="click to toggle"
129
+ onclick="with (this.firstChild.style)
130
+ { display = (display == '') ? 'none' : '' }">
131
+ <pre>1
132
+ 2</pre>
133
+ </td>
134
+ <td class="code">
135
+ <pre><span class="Ke">def </span><span class="NaFu">foo</span>(bar):
136
+ <span class="Ke">pass</span>
137
+ </pre>
138
+ </td>
139
+ </tr></table></div>
140
+
141
+ (whitespace added to improve clarity).
142
+
143
+ Wrapping can be disabled using the `nowrap` option.
144
+
145
+ A list of lines can be specified using the `hl_lines` option to make these
146
+ lines highlighted (as of Pygments 0.11).
147
+
148
+ With the `full` option, a complete HTML 4 document is output, including
149
+ the style definitions inside a ``<style>`` tag, or in a separate file if
150
+ the `cssfile` option is given.
151
+
152
+ When `tagsfile` is set to the path of a ctags index file, it is used to
153
+ generate hyperlinks from names to their definition. You must enable
154
+ `lineanchors` and run ctags with the `-n` option for this to work. The
155
+ `python-ctags` module from PyPI must be installed to use this feature;
156
+ otherwise a `RuntimeError` will be raised.
157
+
158
+ The `get_style_defs(arg='')` method of a `HtmlFormatter` returns a string
159
+ containing CSS rules for the CSS classes used by the formatter. The
160
+ argument `arg` can be used to specify additional CSS selectors that
161
+ are prepended to the classes. A call `fmter.get_style_defs('td .code')`
162
+ would result in the following CSS classes:
163
+
164
+ .. sourcecode:: css
165
+
166
+ td .code .kw { font-weight: bold; color: #00FF00 }
167
+ td .code .cm { color: #999999 }
168
+ ...
169
+
170
+ If you have Pygments 0.6 or higher, you can also pass a list or tuple to the
171
+ `get_style_defs()` method to request multiple prefixes for the tokens:
172
+
173
+ .. sourcecode:: python
174
+
175
+ formatter.get_style_defs(['div.syntax pre', 'pre.syntax'])
176
+
177
+ The output would then look like this:
178
+
179
+ .. sourcecode:: css
180
+
181
+ div.syntax pre .kw,
182
+ pre.syntax .kw { font-weight: bold; color: #00FF00 }
183
+ div.syntax pre .cm,
184
+ pre.syntax .cm { color: #999999 }
185
+ ...
186
+
187
+ Additional options accepted:
188
+
189
+ `nowrap`
190
+ If set to ``True``, don't wrap the tokens at all, not even inside a ``<pre>``
191
+ tag. This disables most other options (default: ``False``).
192
+
193
+ `full`
194
+ Tells the formatter to output a "full" document, i.e. a complete
195
+ self-contained document (default: ``False``).
196
+
197
+ `title`
198
+ If `full` is true, the title that should be used to caption the
199
+ document (default: ``''``).
200
+
201
+ `style`
202
+ The style to use, can be a string or a Style subclass (default:
203
+ ``'default'``). This option has no effect if the `cssfile`
204
+ and `noclobber_cssfile` option are given and the file specified in
205
+ `cssfile` exists.
206
+
207
+ `noclasses`
208
+ If set to true, token ``<span>`` tags (as well as line number elements)
209
+ will not use CSS classes, but inline styles. This is not recommended
210
+ for larger pieces of code since it increases output size by quite a bit
211
+ (default: ``False``).
212
+
213
+ `classprefix`
214
+ Since the token types use relatively short class names, they may clash
215
+ with some of your own class names. In this case you can use the
216
+ `classprefix` option to give a string to prepend to all Pygments-generated
217
+ CSS class names for token types.
218
+ Note that this option also affects the output of `get_style_defs()`.
219
+
220
+ `cssclass`
221
+ CSS class for the wrapping ``<div>`` tag (default: ``'highlight'``).
222
+ If you set this option, the default selector for `get_style_defs()`
223
+ will be this class.
224
+
225
+ .. versionadded:: 0.9
226
+ If you select the ``'table'`` line numbers, the wrapping table will
227
+ have a CSS class of this string plus ``'table'``, the default is
228
+ accordingly ``'highlighttable'``.
229
+
230
+ `cssstyles`
231
+ Inline CSS styles for the wrapping ``<div>`` tag (default: ``''``).
232
+
233
+ `prestyles`
234
+ Inline CSS styles for the ``<pre>`` tag (default: ``''``).
235
+
236
+ .. versionadded:: 0.11
237
+
238
+ `cssfile`
239
+ If the `full` option is true and this option is given, it must be the
240
+ name of an external file. If the filename does not include an absolute
241
+ path, the file's path will be assumed to be relative to the main output
242
+ file's path, if the latter can be found. The stylesheet is then written
243
+ to this file instead of the HTML file.
244
+
245
+ .. versionadded:: 0.6
246
+
247
+ `noclobber_cssfile`
248
+ If `cssfile` is given and the specified file exists, the css file will
249
+ not be overwritten. This allows the use of the `full` option in
250
+ combination with a user specified css file. Default is ``False``.
251
+
252
+ .. versionadded:: 1.1
253
+
254
+ `linenos`
255
+ If set to ``'table'``, output line numbers as a table with two cells,
256
+ one containing the line numbers, the other the whole code. This is
257
+ copy-and-paste-friendly, but may cause alignment problems with some
258
+ browsers or fonts. If set to ``'inline'``, the line numbers will be
259
+ integrated in the ``<pre>`` tag that contains the code (that setting
260
+ is *new in Pygments 0.8*).
261
+
262
+ For compatibility with Pygments 0.7 and earlier, every true value
263
+ except ``'inline'`` means the same as ``'table'`` (in particular, that
264
+ means also ``True``).
265
+
266
+ The default value is ``False``, which means no line numbers at all.
267
+
268
+ **Note:** with the default ("table") line number mechanism, the line
269
+ numbers and code can have different line heights in Internet Explorer
270
+ unless you give the enclosing ``<pre>`` tags an explicit ``line-height``
271
+ CSS property (you get the default line spacing with ``line-height:
272
+ 125%``).
273
+
274
+ `hl_lines`
275
+ Specify a list of lines to be highlighted. The line numbers are always
276
+ relative to the input (i.e. the first line is line 1) and are
277
+ independent of `linenostart`.
278
+
279
+ .. versionadded:: 0.11
280
+
281
+ `linenostart`
282
+ The line number for the first line (default: ``1``).
283
+
284
+ `linenostep`
285
+ If set to a number n > 1, only every nth line number is printed.
286
+
287
+ `linenospecial`
288
+ If set to a number n > 0, every nth line number is given the CSS
289
+ class ``"special"`` (default: ``0``).
290
+
291
+ `nobackground`
292
+ If set to ``True``, the formatter won't output the background color
293
+ for the wrapping element (this automatically defaults to ``False``
294
+ when there is no wrapping element [eg: no argument for the
295
+ `get_syntax_defs` method given]) (default: ``False``).
296
+
297
+ .. versionadded:: 0.6
298
+
299
+ `lineseparator`
300
+ This string is output between lines of code. It defaults to ``"\n"``,
301
+ which is enough to break a line inside ``<pre>`` tags, but you can
302
+ e.g. set it to ``"<br>"`` to get HTML line breaks.
303
+
304
+ .. versionadded:: 0.7
305
+
306
+ `lineanchors`
307
+ If set to a nonempty string, e.g. ``foo``, the formatter will wrap each
308
+ output line in an anchor tag with an ``id`` (and `name`) of ``foo-linenumber``.
309
+ This allows easy linking to certain lines.
310
+
311
+ .. versionadded:: 0.9
312
+
313
+ `linespans`
314
+ If set to a nonempty string, e.g. ``foo``, the formatter will wrap each
315
+ output line in a span tag with an ``id`` of ``foo-linenumber``.
316
+ This allows easy access to lines via javascript.
317
+
318
+ .. versionadded:: 1.6
319
+
320
+ `anchorlinenos`
321
+ If set to `True`, will wrap line numbers in <a> tags. Used in
322
+ combination with `linenos` and `lineanchors`.
323
+
324
+ `tagsfile`
325
+ If set to the path of a ctags file, wrap names in anchor tags that
326
+ link to their definitions. `lineanchors` should be used, and the
327
+ tags file should specify line numbers (see the `-n` option to ctags).
328
+
329
+ .. versionadded:: 1.6
330
+
331
+ `tagurlformat`
332
+ A string formatting pattern used to generate links to ctags definitions.
333
+ Available variables are `%(path)s`, `%(fname)s` and `%(fext)s`.
334
+ Defaults to an empty string, resulting in just `#prefix-number` links.
335
+
336
+ .. versionadded:: 1.6
337
+
338
+ `filename`
339
+ A string used to generate a filename when rendering ``<pre>`` blocks,
340
+ for example if displaying source code. If `linenos` is set to
341
+ ``'table'`` then the filename will be rendered in an initial row
342
+ containing a single `<th>` which spans both columns.
343
+
344
+ .. versionadded:: 2.1
345
+
346
+ `wrapcode`
347
+ Wrap the code inside ``<pre>`` blocks using ``<code>``, as recommended
348
+ by the HTML5 specification.
349
+
350
+ .. versionadded:: 2.4
351
+
352
+ `debug_token_types`
353
+ Add ``title`` attributes to all token ``<span>`` tags that show the
354
+ name of the token.
355
+
356
+ .. versionadded:: 2.10
357
+
358
+
359
+ **Subclassing the HTML formatter**
360
+
361
+ .. versionadded:: 0.7
362
+
363
+ The HTML formatter is now built in a way that allows easy subclassing, thus
364
+ customizing the output HTML code. The `format()` method calls
365
+ `self._format_lines()` which returns a generator that yields tuples of ``(1,
366
+ line)``, where the ``1`` indicates that the ``line`` is a line of the
367
+ formatted source code.
368
+
369
+ If the `nowrap` option is set, the generator is the iterated over and the
370
+ resulting HTML is output.
371
+
372
+ Otherwise, `format()` calls `self.wrap()`, which wraps the generator with
373
+ other generators. These may add some HTML code to the one generated by
374
+ `_format_lines()`, either by modifying the lines generated by the latter,
375
+ then yielding them again with ``(1, line)``, and/or by yielding other HTML
376
+ code before or after the lines, with ``(0, html)``. The distinction between
377
+ source lines and other code makes it possible to wrap the generator multiple
378
+ times.
379
+
380
+ The default `wrap()` implementation adds a ``<div>`` and a ``<pre>`` tag.
381
+
382
+ A custom `HtmlFormatter` subclass could look like this:
383
+
384
+ .. sourcecode:: python
385
+
386
+ class CodeHtmlFormatter(HtmlFormatter):
387
+
388
+ def wrap(self, source, outfile):
389
+ return self._wrap_code(source)
390
+
391
+ def _wrap_code(self, source):
392
+ yield 0, '<code>'
393
+ for i, t in source:
394
+ if i == 1:
395
+ # it's a line of formatted code
396
+ t += '<br>'
397
+ yield i, t
398
+ yield 0, '</code>'
399
+
400
+ This results in wrapping the formatted lines with a ``<code>`` tag, where the
401
+ source lines are broken using ``<br>`` tags.
402
+
403
+ After calling `wrap()`, the `format()` method also adds the "line numbers"
404
+ and/or "full document" wrappers if the respective options are set. Then, all
405
+ HTML yielded by the wrapped generator is output.
406
+ """
407
+
408
+ name = 'HTML'
409
+ aliases = ['html']
410
+ filenames = ['*.html', '*.htm']
411
+
412
+ def __init__(self, **options):
413
+ Formatter.__init__(self, **options)
414
+ self.title = self._decodeifneeded(self.title)
415
+ self.nowrap = get_bool_opt(options, 'nowrap', False)
416
+ self.noclasses = get_bool_opt(options, 'noclasses', False)
417
+ self.classprefix = options.get('classprefix', '')
418
+ self.cssclass = self._decodeifneeded(options.get('cssclass', 'highlight'))
419
+ self.cssstyles = self._decodeifneeded(options.get('cssstyles', ''))
420
+ self.prestyles = self._decodeifneeded(options.get('prestyles', ''))
421
+ self.cssfile = self._decodeifneeded(options.get('cssfile', ''))
422
+ self.noclobber_cssfile = get_bool_opt(options, 'noclobber_cssfile', False)
423
+ self.tagsfile = self._decodeifneeded(options.get('tagsfile', ''))
424
+ self.tagurlformat = self._decodeifneeded(options.get('tagurlformat', ''))
425
+ self.filename = self._decodeifneeded(options.get('filename', ''))
426
+ self.wrapcode = get_bool_opt(options, 'wrapcode', False)
427
+ self.span_element_openers = {}
428
+ self.debug_token_types = get_bool_opt(options, 'debug_token_types', False)
429
+
430
+ if self.tagsfile:
431
+ if not ctags:
432
+ raise RuntimeError('The "ctags" package must to be installed '
433
+ 'to be able to use the "tagsfile" feature.')
434
+ self._ctags = ctags.CTags(self.tagsfile)
435
+
436
+ linenos = options.get('linenos', False)
437
+ if linenos == 'inline':
438
+ self.linenos = 2
439
+ elif linenos:
440
+ # compatibility with <= 0.7
441
+ self.linenos = 1
442
+ else:
443
+ self.linenos = 0
444
+ self.linenostart = abs(get_int_opt(options, 'linenostart', 1))
445
+ self.linenostep = abs(get_int_opt(options, 'linenostep', 1))
446
+ self.linenospecial = abs(get_int_opt(options, 'linenospecial', 0))
447
+ self.nobackground = get_bool_opt(options, 'nobackground', False)
448
+ self.lineseparator = options.get('lineseparator', '\n')
449
+ self.lineanchors = options.get('lineanchors', '')
450
+ self.linespans = options.get('linespans', '')
451
+ self.anchorlinenos = get_bool_opt(options, 'anchorlinenos', False)
452
+ self.hl_lines = set()
453
+ for lineno in get_list_opt(options, 'hl_lines', []):
454
+ try:
455
+ self.hl_lines.add(int(lineno))
456
+ except ValueError:
457
+ pass
458
+
459
+ self._create_stylesheet()
460
+
461
+ def _get_css_class(self, ttype):
462
+ """Return the css class of this token type prefixed with
463
+ the classprefix option."""
464
+ ttypeclass = _get_ttype_class(ttype)
465
+ if ttypeclass:
466
+ return self.classprefix + ttypeclass
467
+ return ''
468
+
469
+ def _get_css_classes(self, ttype):
470
+ """Return the CSS classes of this token type prefixed with the classprefix option."""
471
+ cls = self._get_css_class(ttype)
472
+ while ttype not in STANDARD_TYPES:
473
+ ttype = ttype.parent
474
+ cls = self._get_css_class(ttype) + ' ' + cls
475
+ return cls or ''
476
+
477
+ def _get_css_inline_styles(self, ttype):
478
+ """Return the inline CSS styles for this token type."""
479
+ cclass = self.ttype2class.get(ttype)
480
+ while cclass is None:
481
+ ttype = ttype.parent
482
+ cclass = self.ttype2class.get(ttype)
483
+ return cclass or ''
484
+
485
+ def _create_stylesheet(self):
486
+ t2c = self.ttype2class = {Token: ''}
487
+ c2s = self.class2style = {}
488
+ for ttype, ndef in self.style:
489
+ name = self._get_css_class(ttype)
490
+ style = ''
491
+ if ndef['color']:
492
+ style += 'color: %s; ' % webify(ndef['color'])
493
+ if ndef['bold']:
494
+ style += 'font-weight: bold; '
495
+ if ndef['italic']:
496
+ style += 'font-style: italic; '
497
+ if ndef['underline']:
498
+ style += 'text-decoration: underline; '
499
+ if ndef['bgcolor']:
500
+ style += 'background-color: %s; ' % webify(ndef['bgcolor'])
501
+ if ndef['border']:
502
+ style += 'border: 1px solid %s; ' % webify(ndef['border'])
503
+ if style:
504
+ t2c[ttype] = name
505
+ # save len(ttype) to enable ordering the styles by
506
+ # hierarchy (necessary for CSS cascading rules!)
507
+ c2s[name] = (style[:-2], ttype, len(ttype))
508
+
509
+ def get_style_defs(self, arg=None):
510
+ """
511
+ Return CSS style definitions for the classes produced by the current
512
+ highlighting style. ``arg`` can be a string or list of selectors to
513
+ insert before the token type classes.
514
+ """
515
+ style_lines = []
516
+
517
+ style_lines.extend(self.get_linenos_style_defs())
518
+ style_lines.extend(self.get_background_style_defs(arg))
519
+ style_lines.extend(self.get_token_style_defs(arg))
520
+
521
+ return '\n'.join(style_lines)
522
+
523
+ def get_token_style_defs(self, arg=None):
524
+ prefix = self.get_css_prefix(arg)
525
+
526
+ styles = [
527
+ (level, ttype, cls, style)
528
+ for cls, (style, ttype, level) in self.class2style.items()
529
+ if cls and style
530
+ ]
531
+ styles.sort()
532
+
533
+ lines = [
534
+ '%s { %s } /* %s */' % (prefix(cls), style, repr(ttype)[6:])
535
+ for (level, ttype, cls, style) in styles
536
+ ]
537
+
538
+ return lines
539
+
540
+ def get_background_style_defs(self, arg=None):
541
+ prefix = self.get_css_prefix(arg)
542
+ bg_color = self.style.background_color
543
+ hl_color = self.style.highlight_color
544
+
545
+ lines = []
546
+
547
+ if arg and not self.nobackground and bg_color is not None:
548
+ text_style = ''
549
+ if Text in self.ttype2class:
550
+ text_style = ' ' + self.class2style[self.ttype2class[Text]][0]
551
+ lines.insert(
552
+ 0, '%s{ background: %s;%s }' % (
553
+ prefix(''), bg_color, text_style
554
+ )
555
+ )
556
+ if hl_color is not None:
557
+ lines.insert(
558
+ 0, '%s { background-color: %s }' % (prefix('hll'), hl_color)
559
+ )
560
+
561
+ return lines
562
+
563
+ def get_linenos_style_defs(self):
564
+ lines = [
565
+ 'pre { %s }' % self._pre_style,
566
+ 'td.linenos .normal { %s }' % self._linenos_style,
567
+ 'span.linenos { %s }' % self._linenos_style,
568
+ 'td.linenos .special { %s }' % self._linenos_special_style,
569
+ 'span.linenos.special { %s }' % self._linenos_special_style,
570
+ ]
571
+
572
+ return lines
573
+
574
+ def get_css_prefix(self, arg):
575
+ if arg is None:
576
+ arg = ('cssclass' in self.options and '.'+self.cssclass or '')
577
+ if isinstance(arg, str):
578
+ args = [arg]
579
+ else:
580
+ args = list(arg)
581
+
582
+ def prefix(cls):
583
+ if cls:
584
+ cls = '.' + cls
585
+ tmp = []
586
+ for arg in args:
587
+ tmp.append((arg and arg + ' ' or '') + cls)
588
+ return ', '.join(tmp)
589
+
590
+ return prefix
591
+
592
+ @property
593
+ def _pre_style(self):
594
+ return 'line-height: 125%;'
595
+
596
+ @property
597
+ def _linenos_style(self):
598
+ return 'color: %s; background-color: %s; padding-left: 5px; padding-right: 5px;' % (
599
+ self.style.line_number_color,
600
+ self.style.line_number_background_color
601
+ )
602
+
603
+ @property
604
+ def _linenos_special_style(self):
605
+ return 'color: %s; background-color: %s; padding-left: 5px; padding-right: 5px;' % (
606
+ self.style.line_number_special_color,
607
+ self.style.line_number_special_background_color
608
+ )
609
+
610
+ def _decodeifneeded(self, value):
611
+ if isinstance(value, bytes):
612
+ if self.encoding:
613
+ return value.decode(self.encoding)
614
+ return value.decode()
615
+ return value
616
+
617
+ def _wrap_full(self, inner, outfile):
618
+ if self.cssfile:
619
+ if os.path.isabs(self.cssfile):
620
+ # it's an absolute filename
621
+ cssfilename = self.cssfile
622
+ else:
623
+ try:
624
+ filename = outfile.name
625
+ if not filename or filename[0] == '<':
626
+ # pseudo files, e.g. name == '<fdopen>'
627
+ raise AttributeError
628
+ cssfilename = os.path.join(os.path.dirname(filename),
629
+ self.cssfile)
630
+ except AttributeError:
631
+ print('Note: Cannot determine output file name, '
632
+ 'using current directory as base for the CSS file name',
633
+ file=sys.stderr)
634
+ cssfilename = self.cssfile
635
+ # write CSS file only if noclobber_cssfile isn't given as an option.
636
+ try:
637
+ if not os.path.exists(cssfilename) or not self.noclobber_cssfile:
638
+ with open(cssfilename, "w") as cf:
639
+ cf.write(CSSFILE_TEMPLATE %
640
+ {'styledefs': self.get_style_defs('body')})
641
+ except OSError as err:
642
+ err.strerror = 'Error writing CSS file: ' + err.strerror
643
+ raise
644
+
645
+ yield 0, (DOC_HEADER_EXTERNALCSS %
646
+ dict(title=self.title,
647
+ cssfile=self.cssfile,
648
+ encoding=self.encoding))
649
+ else:
650
+ yield 0, (DOC_HEADER %
651
+ dict(title=self.title,
652
+ styledefs=self.get_style_defs('body'),
653
+ encoding=self.encoding))
654
+
655
+ yield from inner
656
+ yield 0, DOC_FOOTER
657
+
658
+ def _wrap_tablelinenos(self, inner):
659
+ dummyoutfile = StringIO()
660
+ lncount = 0
661
+ for t, line in inner:
662
+ if t:
663
+ lncount += 1
664
+ dummyoutfile.write(line)
665
+
666
+ fl = self.linenostart
667
+ mw = len(str(lncount + fl - 1))
668
+ sp = self.linenospecial
669
+ st = self.linenostep
670
+ la = self.lineanchors
671
+ aln = self.anchorlinenos
672
+ nocls = self.noclasses
673
+
674
+ lines = []
675
+
676
+ for i in range(fl, fl+lncount):
677
+ print_line = i % st == 0
678
+ special_line = sp and i % sp == 0
679
+
680
+ if print_line:
681
+ line = '%*d' % (mw, i)
682
+ if aln:
683
+ line = '<a href="#%s-%d">%s</a>' % (la, i, line)
684
+ else:
685
+ line = ' ' * mw
686
+
687
+ if nocls:
688
+ if special_line:
689
+ style = ' style="%s"' % self._linenos_special_style
690
+ else:
691
+ style = ' style="%s"' % self._linenos_style
692
+ else:
693
+ if special_line:
694
+ style = ' class="special"'
695
+ else:
696
+ style = ' class="normal"'
697
+
698
+ if style:
699
+ line = '<span%s>%s</span>' % (style, line)
700
+
701
+ lines.append(line)
702
+
703
+ ls = '\n'.join(lines)
704
+
705
+ # If a filename was specified, we can't put it into the code table as it
706
+ # would misalign the line numbers. Hence we emit a separate row for it.
707
+ filename_tr = ""
708
+ if self.filename:
709
+ filename_tr = (
710
+ '<tr><th colspan="2" class="filename"><div class="highlight">'
711
+ '<span class="filename">' + self.filename + '</span></div>'
712
+ '</th></tr>')
713
+
714
+ # in case you wonder about the seemingly redundant <div> here: since the
715
+ # content in the other cell also is wrapped in a div, some browsers in
716
+ # some configurations seem to mess up the formatting...
717
+ yield 0, (
718
+ '<table class="%stable">' % self.cssclass + filename_tr +
719
+ '<tr><td class="linenos"><div class="linenodiv"><pre>' +
720
+ ls + '</pre></div></td><td class="code">'
721
+ )
722
+ yield 0, dummyoutfile.getvalue()
723
+ yield 0, '</td></tr></table>'
724
+
725
+ def _wrap_inlinelinenos(self, inner):
726
+ # need a list of lines since we need the width of a single number :(
727
+ inner_lines = list(inner)
728
+ sp = self.linenospecial
729
+ st = self.linenostep
730
+ num = self.linenostart
731
+ mw = len(str(len(inner_lines) + num - 1))
732
+ la = self.lineanchors
733
+ aln = self.anchorlinenos
734
+ nocls = self.noclasses
735
+
736
+ for _, inner_line in inner_lines:
737
+ print_line = num % st == 0
738
+ special_line = sp and num % sp == 0
739
+
740
+ if print_line:
741
+ line = '%*d' % (mw, num)
742
+ else:
743
+ line = ' ' * mw
744
+
745
+ if nocls:
746
+ if special_line:
747
+ style = ' style="%s"' % self._linenos_special_style
748
+ else:
749
+ style = ' style="%s"' % self._linenos_style
750
+ else:
751
+ if special_line:
752
+ style = ' class="linenos special"'
753
+ else:
754
+ style = ' class="linenos"'
755
+
756
+ if style:
757
+ linenos = '<span%s>%s</span>' % (style, line)
758
+ else:
759
+ linenos = line
760
+
761
+ if aln:
762
+ yield 1, ('<a href="#%s-%d">%s</a>' % (la, num, linenos) +
763
+ inner_line)
764
+ else:
765
+ yield 1, linenos + inner_line
766
+ num += 1
767
+
768
+ def _wrap_lineanchors(self, inner):
769
+ s = self.lineanchors
770
+ # subtract 1 since we have to increment i *before* yielding
771
+ i = self.linenostart - 1
772
+ for t, line in inner:
773
+ if t:
774
+ i += 1
775
+ href = "" if self.linenos else ' href="#%s-%d"' % (s, i)
776
+ yield 1, '<a id="%s-%d" name="%s-%d"%s></a>' % (s, i, s, i, href) + line
777
+ else:
778
+ yield 0, line
779
+
780
+ def _wrap_linespans(self, inner):
781
+ s = self.linespans
782
+ i = self.linenostart - 1
783
+ for t, line in inner:
784
+ if t:
785
+ i += 1
786
+ yield 1, '<span id="%s-%d">%s</span>' % (s, i, line)
787
+ else:
788
+ yield 0, line
789
+
790
+ def _wrap_div(self, inner):
791
+ style = []
792
+ if (self.noclasses and not self.nobackground and
793
+ self.style.background_color is not None):
794
+ style.append('background: %s' % (self.style.background_color,))
795
+ if self.cssstyles:
796
+ style.append(self.cssstyles)
797
+ style = '; '.join(style)
798
+
799
+ yield 0, ('<div' + (self.cssclass and ' class="%s"' % self.cssclass) +
800
+ (style and (' style="%s"' % style)) + '>')
801
+ yield from inner
802
+ yield 0, '</div>\n'
803
+
804
+ def _wrap_pre(self, inner):
805
+ style = []
806
+ if self.prestyles:
807
+ style.append(self.prestyles)
808
+ if self.noclasses:
809
+ style.append(self._pre_style)
810
+ style = '; '.join(style)
811
+
812
+ if self.filename and self.linenos != 1:
813
+ yield 0, ('<span class="filename">' + self.filename + '</span>')
814
+
815
+ # the empty span here is to keep leading empty lines from being
816
+ # ignored by HTML parsers
817
+ yield 0, ('<pre' + (style and ' style="%s"' % style) + '><span></span>')
818
+ yield from inner
819
+ yield 0, '</pre>'
820
+
821
+ def _wrap_code(self, inner):
822
+ yield 0, '<code>'
823
+ yield from inner
824
+ yield 0, '</code>'
825
+
826
+ @functools.lru_cache(maxsize=100)
827
+ def _translate_parts(self, value):
828
+ """HTML-escape a value and split it by newlines."""
829
+ return value.translate(_escape_html_table).split('\n')
830
+
831
+ def _format_lines(self, tokensource):
832
+ """
833
+ Just format the tokens, without any wrapping tags.
834
+ Yield individual lines.
835
+ """
836
+ nocls = self.noclasses
837
+ lsep = self.lineseparator
838
+ tagsfile = self.tagsfile
839
+
840
+ lspan = ''
841
+ line = []
842
+ for ttype, value in tokensource:
843
+ try:
844
+ cspan = self.span_element_openers[ttype]
845
+ except KeyError:
846
+ title = ' title="%s"' % '.'.join(ttype) if self.debug_token_types else ''
847
+ if nocls:
848
+ css_style = self._get_css_inline_styles(ttype)
849
+ if css_style:
850
+ css_style = self.class2style[css_style][0]
851
+ cspan = '<span style="%s"%s>' % (css_style, title)
852
+ else:
853
+ cspan = ''
854
+ else:
855
+ css_class = self._get_css_classes(ttype)
856
+ if css_class:
857
+ cspan = '<span class="%s"%s>' % (css_class, title)
858
+ else:
859
+ cspan = ''
860
+ self.span_element_openers[ttype] = cspan
861
+
862
+ parts = self._translate_parts(value)
863
+
864
+ if tagsfile and ttype in Token.Name:
865
+ filename, linenumber = self._lookup_ctag(value)
866
+ if linenumber:
867
+ base, filename = os.path.split(filename)
868
+ if base:
869
+ base += '/'
870
+ filename, extension = os.path.splitext(filename)
871
+ url = self.tagurlformat % {'path': base, 'fname': filename,
872
+ 'fext': extension}
873
+ parts[0] = "<a href=\"%s#%s-%d\">%s" % \
874
+ (url, self.lineanchors, linenumber, parts[0])
875
+ parts[-1] = parts[-1] + "</a>"
876
+
877
+ # for all but the last line
878
+ for part in parts[:-1]:
879
+ if line:
880
+ if lspan != cspan:
881
+ line.extend(((lspan and '</span>'), cspan, part,
882
+ (cspan and '</span>'), lsep))
883
+ else: # both are the same
884
+ line.extend((part, (lspan and '</span>'), lsep))
885
+ yield 1, ''.join(line)
886
+ line = []
887
+ elif part:
888
+ yield 1, ''.join((cspan, part, (cspan and '</span>'), lsep))
889
+ else:
890
+ yield 1, lsep
891
+ # for the last line
892
+ if line and parts[-1]:
893
+ if lspan != cspan:
894
+ line.extend(((lspan and '</span>'), cspan, parts[-1]))
895
+ lspan = cspan
896
+ else:
897
+ line.append(parts[-1])
898
+ elif parts[-1]:
899
+ line = [cspan, parts[-1]]
900
+ lspan = cspan
901
+ # else we neither have to open a new span nor set lspan
902
+
903
+ if line:
904
+ line.extend(((lspan and '</span>'), lsep))
905
+ yield 1, ''.join(line)
906
+
907
+ def _lookup_ctag(self, token):
908
+ entry = ctags.TagEntry()
909
+ if self._ctags.find(entry, token.encode(), 0):
910
+ return entry['file'], entry['lineNumber']
911
+ else:
912
+ return None, None
913
+
914
+ def _highlight_lines(self, tokensource):
915
+ """
916
+ Highlighted the lines specified in the `hl_lines` option by
917
+ post-processing the token stream coming from `_format_lines`.
918
+ """
919
+ hls = self.hl_lines
920
+
921
+ for i, (t, value) in enumerate(tokensource):
922
+ if t != 1:
923
+ yield t, value
924
+ if i + 1 in hls: # i + 1 because Python indexes start at 0
925
+ if self.noclasses:
926
+ style = ''
927
+ if self.style.highlight_color is not None:
928
+ style = (' style="background-color: %s"' %
929
+ (self.style.highlight_color,))
930
+ yield 1, '<span%s>%s</span>' % (style, value)
931
+ else:
932
+ yield 1, '<span class="hll">%s</span>' % value
933
+ else:
934
+ yield 1, value
935
+
936
+ def wrap(self, source, outfile):
937
+ """
938
+ Wrap the ``source``, which is a generator yielding
939
+ individual lines, in custom generators. See docstring
940
+ for `format`. Can be overridden.
941
+ """
942
+ if self.wrapcode:
943
+ return self._wrap_div(self._wrap_pre(self._wrap_code(source)))
944
+ else:
945
+ return self._wrap_div(self._wrap_pre(source))
946
+
947
+ def format_unencoded(self, tokensource, outfile):
948
+ """
949
+ The formatting process uses several nested generators; which of
950
+ them are used is determined by the user's options.
951
+
952
+ Each generator should take at least one argument, ``inner``,
953
+ and wrap the pieces of text generated by this.
954
+
955
+ Always yield 2-tuples: (code, text). If "code" is 1, the text
956
+ is part of the original tokensource being highlighted, if it's
957
+ 0, the text is some piece of wrapping. This makes it possible to
958
+ use several different wrappers that process the original source
959
+ linewise, e.g. line number generators.
960
+ """
961
+ source = self._format_lines(tokensource)
962
+
963
+ # As a special case, we wrap line numbers before line highlighting
964
+ # so the line numbers get wrapped in the highlighting tag.
965
+ if not self.nowrap and self.linenos == 2:
966
+ source = self._wrap_inlinelinenos(source)
967
+
968
+ if self.hl_lines:
969
+ source = self._highlight_lines(source)
970
+
971
+ if not self.nowrap:
972
+ if self.lineanchors:
973
+ source = self._wrap_lineanchors(source)
974
+ if self.linespans:
975
+ source = self._wrap_linespans(source)
976
+ source = self.wrap(source, outfile)
977
+ if self.linenos == 1:
978
+ source = self._wrap_tablelinenos(source)
979
+ if self.full:
980
+ source = self._wrap_full(source, outfile)
981
+
982
+ for t, piece in source:
983
+ outfile.write(piece)
venv/lib/python3.10/site-packages/pip/_vendor/pygments/formatters/img.py ADDED
@@ -0,0 +1,641 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.formatters.img
3
+ ~~~~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Formatter for Pixmap output.
6
+
7
+ :copyright: Copyright 2006-2021 by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ import os
12
+ import sys
13
+
14
+ from pip._vendor.pygments.formatter import Formatter
15
+ from pip._vendor.pygments.util import get_bool_opt, get_int_opt, get_list_opt, \
16
+ get_choice_opt
17
+
18
+ import subprocess
19
+
20
+ # Import this carefully
21
+ try:
22
+ from PIL import Image, ImageDraw, ImageFont
23
+ pil_available = True
24
+ except ImportError:
25
+ pil_available = False
26
+
27
+ try:
28
+ import _winreg
29
+ except ImportError:
30
+ try:
31
+ import winreg as _winreg
32
+ except ImportError:
33
+ _winreg = None
34
+
35
+ __all__ = ['ImageFormatter', 'GifImageFormatter', 'JpgImageFormatter',
36
+ 'BmpImageFormatter']
37
+
38
+
39
+ # For some unknown reason every font calls it something different
40
+ STYLES = {
41
+ 'NORMAL': ['', 'Roman', 'Book', 'Normal', 'Regular', 'Medium'],
42
+ 'ITALIC': ['Oblique', 'Italic'],
43
+ 'BOLD': ['Bold'],
44
+ 'BOLDITALIC': ['Bold Oblique', 'Bold Italic'],
45
+ }
46
+
47
+ # A sane default for modern systems
48
+ DEFAULT_FONT_NAME_NIX = 'DejaVu Sans Mono'
49
+ DEFAULT_FONT_NAME_WIN = 'Courier New'
50
+ DEFAULT_FONT_NAME_MAC = 'Menlo'
51
+
52
+
53
+ class PilNotAvailable(ImportError):
54
+ """When Python imaging library is not available"""
55
+
56
+
57
+ class FontNotFound(Exception):
58
+ """When there are no usable fonts specified"""
59
+
60
+
61
+ class FontManager:
62
+ """
63
+ Manages a set of fonts: normal, italic, bold, etc...
64
+ """
65
+
66
+ def __init__(self, font_name, font_size=14):
67
+ self.font_name = font_name
68
+ self.font_size = font_size
69
+ self.fonts = {}
70
+ self.encoding = None
71
+ if sys.platform.startswith('win'):
72
+ if not font_name:
73
+ self.font_name = DEFAULT_FONT_NAME_WIN
74
+ self._create_win()
75
+ elif sys.platform.startswith('darwin'):
76
+ if not font_name:
77
+ self.font_name = DEFAULT_FONT_NAME_MAC
78
+ self._create_mac()
79
+ else:
80
+ if not font_name:
81
+ self.font_name = DEFAULT_FONT_NAME_NIX
82
+ self._create_nix()
83
+
84
+ def _get_nix_font_path(self, name, style):
85
+ proc = subprocess.Popen(['fc-list', "%s:style=%s" % (name, style), 'file'],
86
+ stdout=subprocess.PIPE, stderr=None)
87
+ stdout, _ = proc.communicate()
88
+ if proc.returncode == 0:
89
+ lines = stdout.splitlines()
90
+ for line in lines:
91
+ if line.startswith(b'Fontconfig warning:'):
92
+ continue
93
+ path = line.decode().strip().strip(':')
94
+ if path:
95
+ return path
96
+ return None
97
+
98
+ def _create_nix(self):
99
+ for name in STYLES['NORMAL']:
100
+ path = self._get_nix_font_path(self.font_name, name)
101
+ if path is not None:
102
+ self.fonts['NORMAL'] = ImageFont.truetype(path, self.font_size)
103
+ break
104
+ else:
105
+ raise FontNotFound('No usable fonts named: "%s"' %
106
+ self.font_name)
107
+ for style in ('ITALIC', 'BOLD', 'BOLDITALIC'):
108
+ for stylename in STYLES[style]:
109
+ path = self._get_nix_font_path(self.font_name, stylename)
110
+ if path is not None:
111
+ self.fonts[style] = ImageFont.truetype(path, self.font_size)
112
+ break
113
+ else:
114
+ if style == 'BOLDITALIC':
115
+ self.fonts[style] = self.fonts['BOLD']
116
+ else:
117
+ self.fonts[style] = self.fonts['NORMAL']
118
+
119
+ def _get_mac_font_path(self, font_map, name, style):
120
+ return font_map.get((name + ' ' + style).strip().lower())
121
+
122
+ def _create_mac(self):
123
+ font_map = {}
124
+ for font_dir in (os.path.join(os.getenv("HOME"), 'Library/Fonts/'),
125
+ '/Library/Fonts/', '/System/Library/Fonts/'):
126
+ font_map.update(
127
+ (os.path.splitext(f)[0].lower(), os.path.join(font_dir, f))
128
+ for f in os.listdir(font_dir)
129
+ if f.lower().endswith(('ttf', 'ttc')))
130
+
131
+ for name in STYLES['NORMAL']:
132
+ path = self._get_mac_font_path(font_map, self.font_name, name)
133
+ if path is not None:
134
+ self.fonts['NORMAL'] = ImageFont.truetype(path, self.font_size)
135
+ break
136
+ else:
137
+ raise FontNotFound('No usable fonts named: "%s"' %
138
+ self.font_name)
139
+ for style in ('ITALIC', 'BOLD', 'BOLDITALIC'):
140
+ for stylename in STYLES[style]:
141
+ path = self._get_mac_font_path(font_map, self.font_name, stylename)
142
+ if path is not None:
143
+ self.fonts[style] = ImageFont.truetype(path, self.font_size)
144
+ break
145
+ else:
146
+ if style == 'BOLDITALIC':
147
+ self.fonts[style] = self.fonts['BOLD']
148
+ else:
149
+ self.fonts[style] = self.fonts['NORMAL']
150
+
151
+ def _lookup_win(self, key, basename, styles, fail=False):
152
+ for suffix in ('', ' (TrueType)'):
153
+ for style in styles:
154
+ try:
155
+ valname = '%s%s%s' % (basename, style and ' '+style, suffix)
156
+ val, _ = _winreg.QueryValueEx(key, valname)
157
+ return val
158
+ except OSError:
159
+ continue
160
+ else:
161
+ if fail:
162
+ raise FontNotFound('Font %s (%s) not found in registry' %
163
+ (basename, styles[0]))
164
+ return None
165
+
166
+ def _create_win(self):
167
+ lookuperror = None
168
+ keynames = [ (_winreg.HKEY_CURRENT_USER, r'Software\Microsoft\Windows NT\CurrentVersion\Fonts'),
169
+ (_winreg.HKEY_CURRENT_USER, r'Software\Microsoft\Windows\CurrentVersion\Fonts'),
170
+ (_winreg.HKEY_LOCAL_MACHINE, r'Software\Microsoft\Windows NT\CurrentVersion\Fonts'),
171
+ (_winreg.HKEY_LOCAL_MACHINE, r'Software\Microsoft\Windows\CurrentVersion\Fonts') ]
172
+ for keyname in keynames:
173
+ try:
174
+ key = _winreg.OpenKey(*keyname)
175
+ try:
176
+ path = self._lookup_win(key, self.font_name, STYLES['NORMAL'], True)
177
+ self.fonts['NORMAL'] = ImageFont.truetype(path, self.font_size)
178
+ for style in ('ITALIC', 'BOLD', 'BOLDITALIC'):
179
+ path = self._lookup_win(key, self.font_name, STYLES[style])
180
+ if path:
181
+ self.fonts[style] = ImageFont.truetype(path, self.font_size)
182
+ else:
183
+ if style == 'BOLDITALIC':
184
+ self.fonts[style] = self.fonts['BOLD']
185
+ else:
186
+ self.fonts[style] = self.fonts['NORMAL']
187
+ return
188
+ except FontNotFound as err:
189
+ lookuperror = err
190
+ finally:
191
+ _winreg.CloseKey(key)
192
+ except OSError:
193
+ pass
194
+ else:
195
+ # If we get here, we checked all registry keys and had no luck
196
+ # We can be in one of two situations now:
197
+ # * All key lookups failed. In this case lookuperror is None and we
198
+ # will raise a generic error
199
+ # * At least one lookup failed with a FontNotFound error. In this
200
+ # case, we will raise that as a more specific error
201
+ if lookuperror:
202
+ raise lookuperror
203
+ raise FontNotFound('Can\'t open Windows font registry key')
204
+
205
+ def get_char_size(self):
206
+ """
207
+ Get the character size.
208
+ """
209
+ return self.fonts['NORMAL'].getsize('M')
210
+
211
+ def get_text_size(self, text):
212
+ """
213
+ Get the text size(width, height).
214
+ """
215
+ return self.fonts['NORMAL'].getsize(text)
216
+
217
+ def get_font(self, bold, oblique):
218
+ """
219
+ Get the font based on bold and italic flags.
220
+ """
221
+ if bold and oblique:
222
+ return self.fonts['BOLDITALIC']
223
+ elif bold:
224
+ return self.fonts['BOLD']
225
+ elif oblique:
226
+ return self.fonts['ITALIC']
227
+ else:
228
+ return self.fonts['NORMAL']
229
+
230
+
231
+ class ImageFormatter(Formatter):
232
+ """
233
+ Create a PNG image from source code. This uses the Python Imaging Library to
234
+ generate a pixmap from the source code.
235
+
236
+ .. versionadded:: 0.10
237
+
238
+ Additional options accepted:
239
+
240
+ `image_format`
241
+ An image format to output to that is recognised by PIL, these include:
242
+
243
+ * "PNG" (default)
244
+ * "JPEG"
245
+ * "BMP"
246
+ * "GIF"
247
+
248
+ `line_pad`
249
+ The extra spacing (in pixels) between each line of text.
250
+
251
+ Default: 2
252
+
253
+ `font_name`
254
+ The font name to be used as the base font from which others, such as
255
+ bold and italic fonts will be generated. This really should be a
256
+ monospace font to look sane.
257
+
258
+ Default: "Courier New" on Windows, "Menlo" on Mac OS, and
259
+ "DejaVu Sans Mono" on \\*nix
260
+
261
+ `font_size`
262
+ The font size in points to be used.
263
+
264
+ Default: 14
265
+
266
+ `image_pad`
267
+ The padding, in pixels to be used at each edge of the resulting image.
268
+
269
+ Default: 10
270
+
271
+ `line_numbers`
272
+ Whether line numbers should be shown: True/False
273
+
274
+ Default: True
275
+
276
+ `line_number_start`
277
+ The line number of the first line.
278
+
279
+ Default: 1
280
+
281
+ `line_number_step`
282
+ The step used when printing line numbers.
283
+
284
+ Default: 1
285
+
286
+ `line_number_bg`
287
+ The background colour (in "#123456" format) of the line number bar, or
288
+ None to use the style background color.
289
+
290
+ Default: "#eed"
291
+
292
+ `line_number_fg`
293
+ The text color of the line numbers (in "#123456"-like format).
294
+
295
+ Default: "#886"
296
+
297
+ `line_number_chars`
298
+ The number of columns of line numbers allowable in the line number
299
+ margin.
300
+
301
+ Default: 2
302
+
303
+ `line_number_bold`
304
+ Whether line numbers will be bold: True/False
305
+
306
+ Default: False
307
+
308
+ `line_number_italic`
309
+ Whether line numbers will be italicized: True/False
310
+
311
+ Default: False
312
+
313
+ `line_number_separator`
314
+ Whether a line will be drawn between the line number area and the
315
+ source code area: True/False
316
+
317
+ Default: True
318
+
319
+ `line_number_pad`
320
+ The horizontal padding (in pixels) between the line number margin, and
321
+ the source code area.
322
+
323
+ Default: 6
324
+
325
+ `hl_lines`
326
+ Specify a list of lines to be highlighted.
327
+
328
+ .. versionadded:: 1.2
329
+
330
+ Default: empty list
331
+
332
+ `hl_color`
333
+ Specify the color for highlighting lines.
334
+
335
+ .. versionadded:: 1.2
336
+
337
+ Default: highlight color of the selected style
338
+ """
339
+
340
+ # Required by the pygments mapper
341
+ name = 'img'
342
+ aliases = ['img', 'IMG', 'png']
343
+ filenames = ['*.png']
344
+
345
+ unicodeoutput = False
346
+
347
+ default_image_format = 'png'
348
+
349
+ def __init__(self, **options):
350
+ """
351
+ See the class docstring for explanation of options.
352
+ """
353
+ if not pil_available:
354
+ raise PilNotAvailable(
355
+ 'Python Imaging Library is required for this formatter')
356
+ Formatter.__init__(self, **options)
357
+ self.encoding = 'latin1' # let pygments.format() do the right thing
358
+ # Read the style
359
+ self.styles = dict(self.style)
360
+ if self.style.background_color is None:
361
+ self.background_color = '#fff'
362
+ else:
363
+ self.background_color = self.style.background_color
364
+ # Image options
365
+ self.image_format = get_choice_opt(
366
+ options, 'image_format', ['png', 'jpeg', 'gif', 'bmp'],
367
+ self.default_image_format, normcase=True)
368
+ self.image_pad = get_int_opt(options, 'image_pad', 10)
369
+ self.line_pad = get_int_opt(options, 'line_pad', 2)
370
+ # The fonts
371
+ fontsize = get_int_opt(options, 'font_size', 14)
372
+ self.fonts = FontManager(options.get('font_name', ''), fontsize)
373
+ self.fontw, self.fonth = self.fonts.get_char_size()
374
+ # Line number options
375
+ self.line_number_fg = options.get('line_number_fg', '#886')
376
+ self.line_number_bg = options.get('line_number_bg', '#eed')
377
+ self.line_number_chars = get_int_opt(options,
378
+ 'line_number_chars', 2)
379
+ self.line_number_bold = get_bool_opt(options,
380
+ 'line_number_bold', False)
381
+ self.line_number_italic = get_bool_opt(options,
382
+ 'line_number_italic', False)
383
+ self.line_number_pad = get_int_opt(options, 'line_number_pad', 6)
384
+ self.line_numbers = get_bool_opt(options, 'line_numbers', True)
385
+ self.line_number_separator = get_bool_opt(options,
386
+ 'line_number_separator', True)
387
+ self.line_number_step = get_int_opt(options, 'line_number_step', 1)
388
+ self.line_number_start = get_int_opt(options, 'line_number_start', 1)
389
+ if self.line_numbers:
390
+ self.line_number_width = (self.fontw * self.line_number_chars +
391
+ self.line_number_pad * 2)
392
+ else:
393
+ self.line_number_width = 0
394
+ self.hl_lines = []
395
+ hl_lines_str = get_list_opt(options, 'hl_lines', [])
396
+ for line in hl_lines_str:
397
+ try:
398
+ self.hl_lines.append(int(line))
399
+ except ValueError:
400
+ pass
401
+ self.hl_color = options.get('hl_color',
402
+ self.style.highlight_color) or '#f90'
403
+ self.drawables = []
404
+
405
+ def get_style_defs(self, arg=''):
406
+ raise NotImplementedError('The -S option is meaningless for the image '
407
+ 'formatter. Use -O style=<stylename> instead.')
408
+
409
+ def _get_line_height(self):
410
+ """
411
+ Get the height of a line.
412
+ """
413
+ return self.fonth + self.line_pad
414
+
415
+ def _get_line_y(self, lineno):
416
+ """
417
+ Get the Y coordinate of a line number.
418
+ """
419
+ return lineno * self._get_line_height() + self.image_pad
420
+
421
+ def _get_char_width(self):
422
+ """
423
+ Get the width of a character.
424
+ """
425
+ return self.fontw
426
+
427
+ def _get_char_x(self, linelength):
428
+ """
429
+ Get the X coordinate of a character position.
430
+ """
431
+ return linelength + self.image_pad + self.line_number_width
432
+
433
+ def _get_text_pos(self, linelength, lineno):
434
+ """
435
+ Get the actual position for a character and line position.
436
+ """
437
+ return self._get_char_x(linelength), self._get_line_y(lineno)
438
+
439
+ def _get_linenumber_pos(self, lineno):
440
+ """
441
+ Get the actual position for the start of a line number.
442
+ """
443
+ return (self.image_pad, self._get_line_y(lineno))
444
+
445
+ def _get_text_color(self, style):
446
+ """
447
+ Get the correct color for the token from the style.
448
+ """
449
+ if style['color'] is not None:
450
+ fill = '#' + style['color']
451
+ else:
452
+ fill = '#000'
453
+ return fill
454
+
455
+ def _get_text_bg_color(self, style):
456
+ """
457
+ Get the correct background color for the token from the style.
458
+ """
459
+ if style['bgcolor'] is not None:
460
+ bg_color = '#' + style['bgcolor']
461
+ else:
462
+ bg_color = None
463
+ return bg_color
464
+
465
+ def _get_style_font(self, style):
466
+ """
467
+ Get the correct font for the style.
468
+ """
469
+ return self.fonts.get_font(style['bold'], style['italic'])
470
+
471
+ def _get_image_size(self, maxlinelength, maxlineno):
472
+ """
473
+ Get the required image size.
474
+ """
475
+ return (self._get_char_x(maxlinelength) + self.image_pad,
476
+ self._get_line_y(maxlineno + 0) + self.image_pad)
477
+
478
+ def _draw_linenumber(self, posno, lineno):
479
+ """
480
+ Remember a line number drawable to paint later.
481
+ """
482
+ self._draw_text(
483
+ self._get_linenumber_pos(posno),
484
+ str(lineno).rjust(self.line_number_chars),
485
+ font=self.fonts.get_font(self.line_number_bold,
486
+ self.line_number_italic),
487
+ text_fg=self.line_number_fg,
488
+ text_bg=None,
489
+ )
490
+
491
+ def _draw_text(self, pos, text, font, text_fg, text_bg):
492
+ """
493
+ Remember a single drawable tuple to paint later.
494
+ """
495
+ self.drawables.append((pos, text, font, text_fg, text_bg))
496
+
497
+ def _create_drawables(self, tokensource):
498
+ """
499
+ Create drawables for the token content.
500
+ """
501
+ lineno = charno = maxcharno = 0
502
+ maxlinelength = linelength = 0
503
+ for ttype, value in tokensource:
504
+ while ttype not in self.styles:
505
+ ttype = ttype.parent
506
+ style = self.styles[ttype]
507
+ # TODO: make sure tab expansion happens earlier in the chain. It
508
+ # really ought to be done on the input, as to do it right here is
509
+ # quite complex.
510
+ value = value.expandtabs(4)
511
+ lines = value.splitlines(True)
512
+ # print lines
513
+ for i, line in enumerate(lines):
514
+ temp = line.rstrip('\n')
515
+ if temp:
516
+ self._draw_text(
517
+ self._get_text_pos(linelength, lineno),
518
+ temp,
519
+ font = self._get_style_font(style),
520
+ text_fg = self._get_text_color(style),
521
+ text_bg = self._get_text_bg_color(style),
522
+ )
523
+ temp_width, temp_hight = self.fonts.get_text_size(temp)
524
+ linelength += temp_width
525
+ maxlinelength = max(maxlinelength, linelength)
526
+ charno += len(temp)
527
+ maxcharno = max(maxcharno, charno)
528
+ if line.endswith('\n'):
529
+ # add a line for each extra line in the value
530
+ linelength = 0
531
+ charno = 0
532
+ lineno += 1
533
+ self.maxlinelength = maxlinelength
534
+ self.maxcharno = maxcharno
535
+ self.maxlineno = lineno
536
+
537
+ def _draw_line_numbers(self):
538
+ """
539
+ Create drawables for the line numbers.
540
+ """
541
+ if not self.line_numbers:
542
+ return
543
+ for p in range(self.maxlineno):
544
+ n = p + self.line_number_start
545
+ if (n % self.line_number_step) == 0:
546
+ self._draw_linenumber(p, n)
547
+
548
+ def _paint_line_number_bg(self, im):
549
+ """
550
+ Paint the line number background on the image.
551
+ """
552
+ if not self.line_numbers:
553
+ return
554
+ if self.line_number_fg is None:
555
+ return
556
+ draw = ImageDraw.Draw(im)
557
+ recth = im.size[-1]
558
+ rectw = self.image_pad + self.line_number_width - self.line_number_pad
559
+ draw.rectangle([(0, 0), (rectw, recth)],
560
+ fill=self.line_number_bg)
561
+ if self.line_number_separator:
562
+ draw.line([(rectw, 0), (rectw, recth)], fill=self.line_number_fg)
563
+ del draw
564
+
565
+ def format(self, tokensource, outfile):
566
+ """
567
+ Format ``tokensource``, an iterable of ``(tokentype, tokenstring)``
568
+ tuples and write it into ``outfile``.
569
+
570
+ This implementation calculates where it should draw each token on the
571
+ pixmap, then calculates the required pixmap size and draws the items.
572
+ """
573
+ self._create_drawables(tokensource)
574
+ self._draw_line_numbers()
575
+ im = Image.new(
576
+ 'RGB',
577
+ self._get_image_size(self.maxlinelength, self.maxlineno),
578
+ self.background_color
579
+ )
580
+ self._paint_line_number_bg(im)
581
+ draw = ImageDraw.Draw(im)
582
+ # Highlight
583
+ if self.hl_lines:
584
+ x = self.image_pad + self.line_number_width - self.line_number_pad + 1
585
+ recth = self._get_line_height()
586
+ rectw = im.size[0] - x
587
+ for linenumber in self.hl_lines:
588
+ y = self._get_line_y(linenumber - 1)
589
+ draw.rectangle([(x, y), (x + rectw, y + recth)],
590
+ fill=self.hl_color)
591
+ for pos, value, font, text_fg, text_bg in self.drawables:
592
+ if text_bg:
593
+ text_size = draw.textsize(text=value, font=font)
594
+ draw.rectangle([pos[0], pos[1], pos[0] + text_size[0], pos[1] + text_size[1]], fill=text_bg)
595
+ draw.text(pos, value, font=font, fill=text_fg)
596
+ im.save(outfile, self.image_format.upper())
597
+
598
+
599
+ # Add one formatter per format, so that the "-f gif" option gives the correct result
600
+ # when used in pygmentize.
601
+
602
+ class GifImageFormatter(ImageFormatter):
603
+ """
604
+ Create a GIF image from source code. This uses the Python Imaging Library to
605
+ generate a pixmap from the source code.
606
+
607
+ .. versionadded:: 1.0
608
+ """
609
+
610
+ name = 'img_gif'
611
+ aliases = ['gif']
612
+ filenames = ['*.gif']
613
+ default_image_format = 'gif'
614
+
615
+
616
+ class JpgImageFormatter(ImageFormatter):
617
+ """
618
+ Create a JPEG image from source code. This uses the Python Imaging Library to
619
+ generate a pixmap from the source code.
620
+
621
+ .. versionadded:: 1.0
622
+ """
623
+
624
+ name = 'img_jpg'
625
+ aliases = ['jpg', 'jpeg']
626
+ filenames = ['*.jpg']
627
+ default_image_format = 'jpeg'
628
+
629
+
630
+ class BmpImageFormatter(ImageFormatter):
631
+ """
632
+ Create a bitmap image from source code. This uses the Python Imaging Library to
633
+ generate a pixmap from the source code.
634
+
635
+ .. versionadded:: 1.0
636
+ """
637
+
638
+ name = 'img_bmp'
639
+ aliases = ['bmp', 'bitmap']
640
+ filenames = ['*.bmp']
641
+ default_image_format = 'bmp'
venv/lib/python3.10/site-packages/pip/_vendor/pygments/formatters/irc.py ADDED
@@ -0,0 +1,179 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.formatters.irc
3
+ ~~~~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Formatter for IRC output
6
+
7
+ :copyright: Copyright 2006-2021 by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ from pip._vendor.pygments.formatter import Formatter
12
+ from pip._vendor.pygments.token import Keyword, Name, Comment, String, Error, \
13
+ Number, Operator, Generic, Token, Whitespace
14
+ from pip._vendor.pygments.util import get_choice_opt
15
+
16
+
17
+ __all__ = ['IRCFormatter']
18
+
19
+
20
+ #: Map token types to a tuple of color values for light and dark
21
+ #: backgrounds.
22
+ IRC_COLORS = {
23
+ Token: ('', ''),
24
+
25
+ Whitespace: ('gray', 'brightblack'),
26
+ Comment: ('gray', 'brightblack'),
27
+ Comment.Preproc: ('cyan', 'brightcyan'),
28
+ Keyword: ('blue', 'brightblue'),
29
+ Keyword.Type: ('cyan', 'brightcyan'),
30
+ Operator.Word: ('magenta', 'brightcyan'),
31
+ Name.Builtin: ('cyan', 'brightcyan'),
32
+ Name.Function: ('green', 'brightgreen'),
33
+ Name.Namespace: ('_cyan_', '_brightcyan_'),
34
+ Name.Class: ('_green_', '_brightgreen_'),
35
+ Name.Exception: ('cyan', 'brightcyan'),
36
+ Name.Decorator: ('brightblack', 'gray'),
37
+ Name.Variable: ('red', 'brightred'),
38
+ Name.Constant: ('red', 'brightred'),
39
+ Name.Attribute: ('cyan', 'brightcyan'),
40
+ Name.Tag: ('brightblue', 'brightblue'),
41
+ String: ('yellow', 'yellow'),
42
+ Number: ('blue', 'brightblue'),
43
+
44
+ Generic.Deleted: ('brightred', 'brightred'),
45
+ Generic.Inserted: ('green', 'brightgreen'),
46
+ Generic.Heading: ('**', '**'),
47
+ Generic.Subheading: ('*magenta*', '*brightmagenta*'),
48
+ Generic.Error: ('brightred', 'brightred'),
49
+
50
+ Error: ('_brightred_', '_brightred_'),
51
+ }
52
+
53
+
54
+ IRC_COLOR_MAP = {
55
+ 'white': 0,
56
+ 'black': 1,
57
+ 'blue': 2,
58
+ 'brightgreen': 3,
59
+ 'brightred': 4,
60
+ 'yellow': 5,
61
+ 'magenta': 6,
62
+ 'orange': 7,
63
+ 'green': 7, #compat w/ ansi
64
+ 'brightyellow': 8,
65
+ 'lightgreen': 9,
66
+ 'brightcyan': 9, # compat w/ ansi
67
+ 'cyan': 10,
68
+ 'lightblue': 11,
69
+ 'red': 11, # compat w/ ansi
70
+ 'brightblue': 12,
71
+ 'brightmagenta': 13,
72
+ 'brightblack': 14,
73
+ 'gray': 15,
74
+ }
75
+
76
+ def ircformat(color, text):
77
+ if len(color) < 1:
78
+ return text
79
+ add = sub = ''
80
+ if '_' in color: # italic
81
+ add += '\x1D'
82
+ sub = '\x1D' + sub
83
+ color = color.strip('_')
84
+ if '*' in color: # bold
85
+ add += '\x02'
86
+ sub = '\x02' + sub
87
+ color = color.strip('*')
88
+ # underline (\x1F) not supported
89
+ # backgrounds (\x03FF,BB) not supported
90
+ if len(color) > 0: # actual color - may have issues with ircformat("red", "blah")+"10" type stuff
91
+ add += '\x03' + str(IRC_COLOR_MAP[color]).zfill(2)
92
+ sub = '\x03' + sub
93
+ return add + text + sub
94
+ return '<'+add+'>'+text+'</'+sub+'>'
95
+
96
+
97
+ class IRCFormatter(Formatter):
98
+ r"""
99
+ Format tokens with IRC color sequences
100
+
101
+ The `get_style_defs()` method doesn't do anything special since there is
102
+ no support for common styles.
103
+
104
+ Options accepted:
105
+
106
+ `bg`
107
+ Set to ``"light"`` or ``"dark"`` depending on the terminal's background
108
+ (default: ``"light"``).
109
+
110
+ `colorscheme`
111
+ A dictionary mapping token types to (lightbg, darkbg) color names or
112
+ ``None`` (default: ``None`` = use builtin colorscheme).
113
+
114
+ `linenos`
115
+ Set to ``True`` to have line numbers in the output as well
116
+ (default: ``False`` = no line numbers).
117
+ """
118
+ name = 'IRC'
119
+ aliases = ['irc', 'IRC']
120
+ filenames = []
121
+
122
+ def __init__(self, **options):
123
+ Formatter.__init__(self, **options)
124
+ self.darkbg = get_choice_opt(options, 'bg',
125
+ ['light', 'dark'], 'light') == 'dark'
126
+ self.colorscheme = options.get('colorscheme', None) or IRC_COLORS
127
+ self.linenos = options.get('linenos', False)
128
+ self._lineno = 0
129
+
130
+ def _write_lineno(self, outfile):
131
+ self._lineno += 1
132
+ outfile.write("\n%04d: " % self._lineno)
133
+
134
+ def _format_unencoded_with_lineno(self, tokensource, outfile):
135
+ self._write_lineno(outfile)
136
+
137
+ for ttype, value in tokensource:
138
+ if value.endswith("\n"):
139
+ self._write_lineno(outfile)
140
+ value = value[:-1]
141
+ color = self.colorscheme.get(ttype)
142
+ while color is None:
143
+ ttype = ttype.parent
144
+ color = self.colorscheme.get(ttype)
145
+ if color:
146
+ color = color[self.darkbg]
147
+ spl = value.split('\n')
148
+ for line in spl[:-1]:
149
+ self._write_lineno(outfile)
150
+ if line:
151
+ outfile.write(ircformat(color, line[:-1]))
152
+ if spl[-1]:
153
+ outfile.write(ircformat(color, spl[-1]))
154
+ else:
155
+ outfile.write(value)
156
+
157
+ outfile.write("\n")
158
+
159
+ def format_unencoded(self, tokensource, outfile):
160
+ if self.linenos:
161
+ self._format_unencoded_with_lineno(tokensource, outfile)
162
+ return
163
+
164
+ for ttype, value in tokensource:
165
+ color = self.colorscheme.get(ttype)
166
+ while color is None:
167
+ ttype = ttype[:-1]
168
+ color = self.colorscheme.get(ttype)
169
+ if color:
170
+ color = color[self.darkbg]
171
+ spl = value.split('\n')
172
+ for line in spl[:-1]:
173
+ if line:
174
+ outfile.write(ircformat(color, line))
175
+ outfile.write('\n')
176
+ if spl[-1]:
177
+ outfile.write(ircformat(color, spl[-1]))
178
+ else:
179
+ outfile.write(value)
venv/lib/python3.10/site-packages/pip/_vendor/pygments/formatters/latex.py ADDED
@@ -0,0 +1,511 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.formatters.latex
3
+ ~~~~~~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Formatter for LaTeX fancyvrb output.
6
+
7
+ :copyright: Copyright 2006-2021 by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ from io import StringIO
12
+
13
+ from pip._vendor.pygments.formatter import Formatter
14
+ from pip._vendor.pygments.lexer import Lexer, do_insertions
15
+ from pip._vendor.pygments.token import Token, STANDARD_TYPES
16
+ from pip._vendor.pygments.util import get_bool_opt, get_int_opt
17
+
18
+
19
+ __all__ = ['LatexFormatter']
20
+
21
+
22
+ def escape_tex(text, commandprefix):
23
+ return text.replace('\\', '\x00'). \
24
+ replace('{', '\x01'). \
25
+ replace('}', '\x02'). \
26
+ replace('\x00', r'\%sZbs{}' % commandprefix). \
27
+ replace('\x01', r'\%sZob{}' % commandprefix). \
28
+ replace('\x02', r'\%sZcb{}' % commandprefix). \
29
+ replace('^', r'\%sZca{}' % commandprefix). \
30
+ replace('_', r'\%sZus{}' % commandprefix). \
31
+ replace('&', r'\%sZam{}' % commandprefix). \
32
+ replace('<', r'\%sZlt{}' % commandprefix). \
33
+ replace('>', r'\%sZgt{}' % commandprefix). \
34
+ replace('#', r'\%sZsh{}' % commandprefix). \
35
+ replace('%', r'\%sZpc{}' % commandprefix). \
36
+ replace('$', r'\%sZdl{}' % commandprefix). \
37
+ replace('-', r'\%sZhy{}' % commandprefix). \
38
+ replace("'", r'\%sZsq{}' % commandprefix). \
39
+ replace('"', r'\%sZdq{}' % commandprefix). \
40
+ replace('~', r'\%sZti{}' % commandprefix)
41
+
42
+
43
+ DOC_TEMPLATE = r'''
44
+ \documentclass{%(docclass)s}
45
+ \usepackage{fancyvrb}
46
+ \usepackage{color}
47
+ \usepackage[%(encoding)s]{inputenc}
48
+ %(preamble)s
49
+
50
+ %(styledefs)s
51
+
52
+ \begin{document}
53
+
54
+ \section*{%(title)s}
55
+
56
+ %(code)s
57
+ \end{document}
58
+ '''
59
+
60
+ ## Small explanation of the mess below :)
61
+ #
62
+ # The previous version of the LaTeX formatter just assigned a command to
63
+ # each token type defined in the current style. That obviously is
64
+ # problematic if the highlighted code is produced for a different style
65
+ # than the style commands themselves.
66
+ #
67
+ # This version works much like the HTML formatter which assigns multiple
68
+ # CSS classes to each <span> tag, from the most specific to the least
69
+ # specific token type, thus falling back to the parent token type if one
70
+ # is not defined. Here, the classes are there too and use the same short
71
+ # forms given in token.STANDARD_TYPES.
72
+ #
73
+ # Highlighted code now only uses one custom command, which by default is
74
+ # \PY and selectable by the commandprefix option (and in addition the
75
+ # escapes \PYZat, \PYZlb and \PYZrb which haven't been renamed for
76
+ # backwards compatibility purposes).
77
+ #
78
+ # \PY has two arguments: the classes, separated by +, and the text to
79
+ # render in that style. The classes are resolved into the respective
80
+ # style commands by magic, which serves to ignore unknown classes.
81
+ #
82
+ # The magic macros are:
83
+ # * \PY@it, \PY@bf, etc. are unconditionally wrapped around the text
84
+ # to render in \PY@do. Their definition determines the style.
85
+ # * \PY@reset resets \PY@it etc. to do nothing.
86
+ # * \PY@toks parses the list of classes, using magic inspired by the
87
+ # keyval package (but modified to use plusses instead of commas
88
+ # because fancyvrb redefines commas inside its environments).
89
+ # * \PY@tok processes one class, calling the \PY@tok@classname command
90
+ # if it exists.
91
+ # * \PY@tok@classname sets the \PY@it etc. to reflect the chosen style
92
+ # for its class.
93
+ # * \PY resets the style, parses the classnames and then calls \PY@do.
94
+ #
95
+ # Tip: to read this code, print it out in substituted form using e.g.
96
+ # >>> print STYLE_TEMPLATE % {'cp': 'PY'}
97
+
98
+ STYLE_TEMPLATE = r'''
99
+ \makeatletter
100
+ \def\%(cp)s@reset{\let\%(cp)s@it=\relax \let\%(cp)s@bf=\relax%%
101
+ \let\%(cp)s@ul=\relax \let\%(cp)s@tc=\relax%%
102
+ \let\%(cp)s@bc=\relax \let\%(cp)s@ff=\relax}
103
+ \def\%(cp)s@tok#1{\csname %(cp)s@tok@#1\endcsname}
104
+ \def\%(cp)s@toks#1+{\ifx\relax#1\empty\else%%
105
+ \%(cp)s@tok{#1}\expandafter\%(cp)s@toks\fi}
106
+ \def\%(cp)s@do#1{\%(cp)s@bc{\%(cp)s@tc{\%(cp)s@ul{%%
107
+ \%(cp)s@it{\%(cp)s@bf{\%(cp)s@ff{#1}}}}}}}
108
+ \def\%(cp)s#1#2{\%(cp)s@reset\%(cp)s@toks#1+\relax+\%(cp)s@do{#2}}
109
+
110
+ %(styles)s
111
+
112
+ \def\%(cp)sZbs{\char`\\}
113
+ \def\%(cp)sZus{\char`\_}
114
+ \def\%(cp)sZob{\char`\{}
115
+ \def\%(cp)sZcb{\char`\}}
116
+ \def\%(cp)sZca{\char`\^}
117
+ \def\%(cp)sZam{\char`\&}
118
+ \def\%(cp)sZlt{\char`\<}
119
+ \def\%(cp)sZgt{\char`\>}
120
+ \def\%(cp)sZsh{\char`\#}
121
+ \def\%(cp)sZpc{\char`\%%}
122
+ \def\%(cp)sZdl{\char`\$}
123
+ \def\%(cp)sZhy{\char`\-}
124
+ \def\%(cp)sZsq{\char`\'}
125
+ \def\%(cp)sZdq{\char`\"}
126
+ \def\%(cp)sZti{\char`\~}
127
+ %% for compatibility with earlier versions
128
+ \def\%(cp)sZat{@}
129
+ \def\%(cp)sZlb{[}
130
+ \def\%(cp)sZrb{]}
131
+ \makeatother
132
+ '''
133
+
134
+
135
+ def _get_ttype_name(ttype):
136
+ fname = STANDARD_TYPES.get(ttype)
137
+ if fname:
138
+ return fname
139
+ aname = ''
140
+ while fname is None:
141
+ aname = ttype[-1] + aname
142
+ ttype = ttype.parent
143
+ fname = STANDARD_TYPES.get(ttype)
144
+ return fname + aname
145
+
146
+
147
+ class LatexFormatter(Formatter):
148
+ r"""
149
+ Format tokens as LaTeX code. This needs the `fancyvrb` and `color`
150
+ standard packages.
151
+
152
+ Without the `full` option, code is formatted as one ``Verbatim``
153
+ environment, like this:
154
+
155
+ .. sourcecode:: latex
156
+
157
+ \begin{Verbatim}[commandchars=\\\{\}]
158
+ \PY{k}{def }\PY{n+nf}{foo}(\PY{n}{bar}):
159
+ \PY{k}{pass}
160
+ \end{Verbatim}
161
+
162
+ The special command used here (``\PY``) and all the other macros it needs
163
+ are output by the `get_style_defs` method.
164
+
165
+ With the `full` option, a complete LaTeX document is output, including
166
+ the command definitions in the preamble.
167
+
168
+ The `get_style_defs()` method of a `LatexFormatter` returns a string
169
+ containing ``\def`` commands defining the macros needed inside the
170
+ ``Verbatim`` environments.
171
+
172
+ Additional options accepted:
173
+
174
+ `style`
175
+ The style to use, can be a string or a Style subclass (default:
176
+ ``'default'``).
177
+
178
+ `full`
179
+ Tells the formatter to output a "full" document, i.e. a complete
180
+ self-contained document (default: ``False``).
181
+
182
+ `title`
183
+ If `full` is true, the title that should be used to caption the
184
+ document (default: ``''``).
185
+
186
+ `docclass`
187
+ If the `full` option is enabled, this is the document class to use
188
+ (default: ``'article'``).
189
+
190
+ `preamble`
191
+ If the `full` option is enabled, this can be further preamble commands,
192
+ e.g. ``\usepackage`` (default: ``''``).
193
+
194
+ `linenos`
195
+ If set to ``True``, output line numbers (default: ``False``).
196
+
197
+ `linenostart`
198
+ The line number for the first line (default: ``1``).
199
+
200
+ `linenostep`
201
+ If set to a number n > 1, only every nth line number is printed.
202
+
203
+ `verboptions`
204
+ Additional options given to the Verbatim environment (see the *fancyvrb*
205
+ docs for possible values) (default: ``''``).
206
+
207
+ `commandprefix`
208
+ The LaTeX commands used to produce colored output are constructed
209
+ using this prefix and some letters (default: ``'PY'``).
210
+
211
+ .. versionadded:: 0.7
212
+ .. versionchanged:: 0.10
213
+ The default is now ``'PY'`` instead of ``'C'``.
214
+
215
+ `texcomments`
216
+ If set to ``True``, enables LaTeX comment lines. That is, LaTex markup
217
+ in comment tokens is not escaped so that LaTeX can render it (default:
218
+ ``False``).
219
+
220
+ .. versionadded:: 1.2
221
+
222
+ `mathescape`
223
+ If set to ``True``, enables LaTeX math mode escape in comments. That
224
+ is, ``'$...$'`` inside a comment will trigger math mode (default:
225
+ ``False``).
226
+
227
+ .. versionadded:: 1.2
228
+
229
+ `escapeinside`
230
+ If set to a string of length 2, enables escaping to LaTeX. Text
231
+ delimited by these 2 characters is read as LaTeX code and
232
+ typeset accordingly. It has no effect in string literals. It has
233
+ no effect in comments if `texcomments` or `mathescape` is
234
+ set. (default: ``''``).
235
+
236
+ .. versionadded:: 2.0
237
+
238
+ `envname`
239
+ Allows you to pick an alternative environment name replacing Verbatim.
240
+ The alternate environment still has to support Verbatim's option syntax.
241
+ (default: ``'Verbatim'``).
242
+
243
+ .. versionadded:: 2.0
244
+ """
245
+ name = 'LaTeX'
246
+ aliases = ['latex', 'tex']
247
+ filenames = ['*.tex']
248
+
249
+ def __init__(self, **options):
250
+ Formatter.__init__(self, **options)
251
+ self.docclass = options.get('docclass', 'article')
252
+ self.preamble = options.get('preamble', '')
253
+ self.linenos = get_bool_opt(options, 'linenos', False)
254
+ self.linenostart = abs(get_int_opt(options, 'linenostart', 1))
255
+ self.linenostep = abs(get_int_opt(options, 'linenostep', 1))
256
+ self.verboptions = options.get('verboptions', '')
257
+ self.nobackground = get_bool_opt(options, 'nobackground', False)
258
+ self.commandprefix = options.get('commandprefix', 'PY')
259
+ self.texcomments = get_bool_opt(options, 'texcomments', False)
260
+ self.mathescape = get_bool_opt(options, 'mathescape', False)
261
+ self.escapeinside = options.get('escapeinside', '')
262
+ if len(self.escapeinside) == 2:
263
+ self.left = self.escapeinside[0]
264
+ self.right = self.escapeinside[1]
265
+ else:
266
+ self.escapeinside = ''
267
+ self.envname = options.get('envname', 'Verbatim')
268
+
269
+ self._create_stylesheet()
270
+
271
+ def _create_stylesheet(self):
272
+ t2n = self.ttype2name = {Token: ''}
273
+ c2d = self.cmd2def = {}
274
+ cp = self.commandprefix
275
+
276
+ def rgbcolor(col):
277
+ if col:
278
+ return ','.join(['%.2f' % (int(col[i] + col[i + 1], 16) / 255.0)
279
+ for i in (0, 2, 4)])
280
+ else:
281
+ return '1,1,1'
282
+
283
+ for ttype, ndef in self.style:
284
+ name = _get_ttype_name(ttype)
285
+ cmndef = ''
286
+ if ndef['bold']:
287
+ cmndef += r'\let\$$@bf=\textbf'
288
+ if ndef['italic']:
289
+ cmndef += r'\let\$$@it=\textit'
290
+ if ndef['underline']:
291
+ cmndef += r'\let\$$@ul=\underline'
292
+ if ndef['roman']:
293
+ cmndef += r'\let\$$@ff=\textrm'
294
+ if ndef['sans']:
295
+ cmndef += r'\let\$$@ff=\textsf'
296
+ if ndef['mono']:
297
+ cmndef += r'\let\$$@ff=\textsf'
298
+ if ndef['color']:
299
+ cmndef += (r'\def\$$@tc##1{\textcolor[rgb]{%s}{##1}}' %
300
+ rgbcolor(ndef['color']))
301
+ if ndef['border']:
302
+ cmndef += (r'\def\$$@bc##1{{\setlength{\fboxsep}{\string -\fboxrule}'
303
+ r'\fcolorbox[rgb]{%s}{%s}{\strut ##1}}}' %
304
+ (rgbcolor(ndef['border']),
305
+ rgbcolor(ndef['bgcolor'])))
306
+ elif ndef['bgcolor']:
307
+ cmndef += (r'\def\$$@bc##1{{\setlength{\fboxsep}{0pt}'
308
+ r'\colorbox[rgb]{%s}{\strut ##1}}}' %
309
+ rgbcolor(ndef['bgcolor']))
310
+ if cmndef == '':
311
+ continue
312
+ cmndef = cmndef.replace('$$', cp)
313
+ t2n[ttype] = name
314
+ c2d[name] = cmndef
315
+
316
+ def get_style_defs(self, arg=''):
317
+ """
318
+ Return the command sequences needed to define the commands
319
+ used to format text in the verbatim environment. ``arg`` is ignored.
320
+ """
321
+ cp = self.commandprefix
322
+ styles = []
323
+ for name, definition in self.cmd2def.items():
324
+ styles.append(r'\@namedef{%s@tok@%s}{%s}' % (cp, name, definition))
325
+ return STYLE_TEMPLATE % {'cp': self.commandprefix,
326
+ 'styles': '\n'.join(styles)}
327
+
328
+ def format_unencoded(self, tokensource, outfile):
329
+ # TODO: add support for background colors
330
+ t2n = self.ttype2name
331
+ cp = self.commandprefix
332
+
333
+ if self.full:
334
+ realoutfile = outfile
335
+ outfile = StringIO()
336
+
337
+ outfile.write('\\begin{' + self.envname + '}[commandchars=\\\\\\{\\}')
338
+ if self.linenos:
339
+ start, step = self.linenostart, self.linenostep
340
+ outfile.write(',numbers=left' +
341
+ (start and ',firstnumber=%d' % start or '') +
342
+ (step and ',stepnumber=%d' % step or ''))
343
+ if self.mathescape or self.texcomments or self.escapeinside:
344
+ outfile.write(',codes={\\catcode`\\$=3\\catcode`\\^=7'
345
+ '\\catcode`\\_=8\\relax}')
346
+ if self.verboptions:
347
+ outfile.write(',' + self.verboptions)
348
+ outfile.write(']\n')
349
+
350
+ for ttype, value in tokensource:
351
+ if ttype in Token.Comment:
352
+ if self.texcomments:
353
+ # Try to guess comment starting lexeme and escape it ...
354
+ start = value[0:1]
355
+ for i in range(1, len(value)):
356
+ if start[0] != value[i]:
357
+ break
358
+ start += value[i]
359
+
360
+ value = value[len(start):]
361
+ start = escape_tex(start, cp)
362
+
363
+ # ... but do not escape inside comment.
364
+ value = start + value
365
+ elif self.mathescape:
366
+ # Only escape parts not inside a math environment.
367
+ parts = value.split('$')
368
+ in_math = False
369
+ for i, part in enumerate(parts):
370
+ if not in_math:
371
+ parts[i] = escape_tex(part, cp)
372
+ in_math = not in_math
373
+ value = '$'.join(parts)
374
+ elif self.escapeinside:
375
+ text = value
376
+ value = ''
377
+ while text:
378
+ a, sep1, text = text.partition(self.left)
379
+ if sep1:
380
+ b, sep2, text = text.partition(self.right)
381
+ if sep2:
382
+ value += escape_tex(a, cp) + b
383
+ else:
384
+ value += escape_tex(a + sep1 + b, cp)
385
+ else:
386
+ value += escape_tex(a, cp)
387
+ else:
388
+ value = escape_tex(value, cp)
389
+ elif ttype not in Token.Escape:
390
+ value = escape_tex(value, cp)
391
+ styles = []
392
+ while ttype is not Token:
393
+ try:
394
+ styles.append(t2n[ttype])
395
+ except KeyError:
396
+ # not in current style
397
+ styles.append(_get_ttype_name(ttype))
398
+ ttype = ttype.parent
399
+ styleval = '+'.join(reversed(styles))
400
+ if styleval:
401
+ spl = value.split('\n')
402
+ for line in spl[:-1]:
403
+ if line:
404
+ outfile.write("\\%s{%s}{%s}" % (cp, styleval, line))
405
+ outfile.write('\n')
406
+ if spl[-1]:
407
+ outfile.write("\\%s{%s}{%s}" % (cp, styleval, spl[-1]))
408
+ else:
409
+ outfile.write(value)
410
+
411
+ outfile.write('\\end{' + self.envname + '}\n')
412
+
413
+ if self.full:
414
+ encoding = self.encoding or 'utf8'
415
+ # map known existings encodings from LaTeX distribution
416
+ encoding = {
417
+ 'utf_8': 'utf8',
418
+ 'latin_1': 'latin1',
419
+ 'iso_8859_1': 'latin1',
420
+ }.get(encoding.replace('-', '_'), encoding)
421
+ realoutfile.write(DOC_TEMPLATE %
422
+ dict(docclass = self.docclass,
423
+ preamble = self.preamble,
424
+ title = self.title,
425
+ encoding = encoding,
426
+ styledefs = self.get_style_defs(),
427
+ code = outfile.getvalue()))
428
+
429
+
430
+ class LatexEmbeddedLexer(Lexer):
431
+ """
432
+ This lexer takes one lexer as argument, the lexer for the language
433
+ being formatted, and the left and right delimiters for escaped text.
434
+
435
+ First everything is scanned using the language lexer to obtain
436
+ strings and comments. All other consecutive tokens are merged and
437
+ the resulting text is scanned for escaped segments, which are given
438
+ the Token.Escape type. Finally text that is not escaped is scanned
439
+ again with the language lexer.
440
+ """
441
+ def __init__(self, left, right, lang, **options):
442
+ self.left = left
443
+ self.right = right
444
+ self.lang = lang
445
+ Lexer.__init__(self, **options)
446
+
447
+ def get_tokens_unprocessed(self, text):
448
+ # find and remove all the escape tokens (replace with an empty string)
449
+ # this is very similar to DelegatingLexer.get_tokens_unprocessed.
450
+ buffered = ''
451
+ insertions = []
452
+ insertion_buf = []
453
+ for i, t, v in self._find_safe_escape_tokens(text):
454
+ if t is None:
455
+ if insertion_buf:
456
+ insertions.append((len(buffered), insertion_buf))
457
+ insertion_buf = []
458
+ buffered += v
459
+ else:
460
+ insertion_buf.append((i, t, v))
461
+ if insertion_buf:
462
+ insertions.append((len(buffered), insertion_buf))
463
+ return do_insertions(insertions,
464
+ self.lang.get_tokens_unprocessed(buffered))
465
+
466
+ def _find_safe_escape_tokens(self, text):
467
+ """ find escape tokens that are not in strings or comments """
468
+ for i, t, v in self._filter_to(
469
+ self.lang.get_tokens_unprocessed(text),
470
+ lambda t: t in Token.Comment or t in Token.String
471
+ ):
472
+ if t is None:
473
+ for i2, t2, v2 in self._find_escape_tokens(v):
474
+ yield i + i2, t2, v2
475
+ else:
476
+ yield i, None, v
477
+
478
+ def _filter_to(self, it, pred):
479
+ """ Keep only the tokens that match `pred`, merge the others together """
480
+ buf = ''
481
+ idx = 0
482
+ for i, t, v in it:
483
+ if pred(t):
484
+ if buf:
485
+ yield idx, None, buf
486
+ buf = ''
487
+ yield i, t, v
488
+ else:
489
+ if not buf:
490
+ idx = i
491
+ buf += v
492
+ if buf:
493
+ yield idx, None, buf
494
+
495
+ def _find_escape_tokens(self, text):
496
+ """ Find escape tokens within text, give token=None otherwise """
497
+ index = 0
498
+ while text:
499
+ a, sep1, text = text.partition(self.left)
500
+ if a:
501
+ yield index, None, a
502
+ index += len(a)
503
+ if sep1:
504
+ b, sep2, text = text.partition(self.right)
505
+ if sep2:
506
+ yield index + len(sep1), Token.Escape, b
507
+ index += len(sep1) + len(b) + len(sep2)
508
+ else:
509
+ yield index, Token.Error, sep1
510
+ index += len(sep1)
511
+ text = b
venv/lib/python3.10/site-packages/pip/_vendor/pygments/formatters/other.py ADDED
@@ -0,0 +1,161 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.formatters.other
3
+ ~~~~~~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Other formatters: NullFormatter, RawTokenFormatter.
6
+
7
+ :copyright: Copyright 2006-2021 by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ from pip._vendor.pygments.formatter import Formatter
12
+ from pip._vendor.pygments.util import get_choice_opt
13
+ from pip._vendor.pygments.token import Token
14
+ from pip._vendor.pygments.console import colorize
15
+
16
+ __all__ = ['NullFormatter', 'RawTokenFormatter', 'TestcaseFormatter']
17
+
18
+
19
+ class NullFormatter(Formatter):
20
+ """
21
+ Output the text unchanged without any formatting.
22
+ """
23
+ name = 'Text only'
24
+ aliases = ['text', 'null']
25
+ filenames = ['*.txt']
26
+
27
+ def format(self, tokensource, outfile):
28
+ enc = self.encoding
29
+ for ttype, value in tokensource:
30
+ if enc:
31
+ outfile.write(value.encode(enc))
32
+ else:
33
+ outfile.write(value)
34
+
35
+
36
+ class RawTokenFormatter(Formatter):
37
+ r"""
38
+ Format tokens as a raw representation for storing token streams.
39
+
40
+ The format is ``tokentype<TAB>repr(tokenstring)\n``. The output can later
41
+ be converted to a token stream with the `RawTokenLexer`, described in the
42
+ :doc:`lexer list <lexers>`.
43
+
44
+ Only two options are accepted:
45
+
46
+ `compress`
47
+ If set to ``'gz'`` or ``'bz2'``, compress the output with the given
48
+ compression algorithm after encoding (default: ``''``).
49
+ `error_color`
50
+ If set to a color name, highlight error tokens using that color. If
51
+ set but with no value, defaults to ``'red'``.
52
+
53
+ .. versionadded:: 0.11
54
+
55
+ """
56
+ name = 'Raw tokens'
57
+ aliases = ['raw', 'tokens']
58
+ filenames = ['*.raw']
59
+
60
+ unicodeoutput = False
61
+
62
+ def __init__(self, **options):
63
+ Formatter.__init__(self, **options)
64
+ # We ignore self.encoding if it is set, since it gets set for lexer
65
+ # and formatter if given with -Oencoding on the command line.
66
+ # The RawTokenFormatter outputs only ASCII. Override here.
67
+ self.encoding = 'ascii' # let pygments.format() do the right thing
68
+ self.compress = get_choice_opt(options, 'compress',
69
+ ['', 'none', 'gz', 'bz2'], '')
70
+ self.error_color = options.get('error_color', None)
71
+ if self.error_color is True:
72
+ self.error_color = 'red'
73
+ if self.error_color is not None:
74
+ try:
75
+ colorize(self.error_color, '')
76
+ except KeyError:
77
+ raise ValueError("Invalid color %r specified" %
78
+ self.error_color)
79
+
80
+ def format(self, tokensource, outfile):
81
+ try:
82
+ outfile.write(b'')
83
+ except TypeError:
84
+ raise TypeError('The raw tokens formatter needs a binary '
85
+ 'output file')
86
+ if self.compress == 'gz':
87
+ import gzip
88
+ outfile = gzip.GzipFile('', 'wb', 9, outfile)
89
+
90
+ write = outfile.write
91
+ flush = outfile.close
92
+ elif self.compress == 'bz2':
93
+ import bz2
94
+ compressor = bz2.BZ2Compressor(9)
95
+
96
+ def write(text):
97
+ outfile.write(compressor.compress(text))
98
+
99
+ def flush():
100
+ outfile.write(compressor.flush())
101
+ outfile.flush()
102
+ else:
103
+ write = outfile.write
104
+ flush = outfile.flush
105
+
106
+ if self.error_color:
107
+ for ttype, value in tokensource:
108
+ line = b"%r\t%r\n" % (ttype, value)
109
+ if ttype is Token.Error:
110
+ write(colorize(self.error_color, line))
111
+ else:
112
+ write(line)
113
+ else:
114
+ for ttype, value in tokensource:
115
+ write(b"%r\t%r\n" % (ttype, value))
116
+ flush()
117
+
118
+
119
+ TESTCASE_BEFORE = '''\
120
+ def testNeedsName(lexer):
121
+ fragment = %r
122
+ tokens = [
123
+ '''
124
+ TESTCASE_AFTER = '''\
125
+ ]
126
+ assert list(lexer.get_tokens(fragment)) == tokens
127
+ '''
128
+
129
+
130
+ class TestcaseFormatter(Formatter):
131
+ """
132
+ Format tokens as appropriate for a new testcase.
133
+
134
+ .. versionadded:: 2.0
135
+ """
136
+ name = 'Testcase'
137
+ aliases = ['testcase']
138
+
139
+ def __init__(self, **options):
140
+ Formatter.__init__(self, **options)
141
+ if self.encoding is not None and self.encoding != 'utf-8':
142
+ raise ValueError("Only None and utf-8 are allowed encodings.")
143
+
144
+ def format(self, tokensource, outfile):
145
+ indentation = ' ' * 12
146
+ rawbuf = []
147
+ outbuf = []
148
+ for ttype, value in tokensource:
149
+ rawbuf.append(value)
150
+ outbuf.append('%s(%s, %r),\n' % (indentation, ttype, value))
151
+
152
+ before = TESTCASE_BEFORE % (''.join(rawbuf),)
153
+ during = ''.join(outbuf)
154
+ after = TESTCASE_AFTER
155
+ if self.encoding is None:
156
+ outfile.write(before + during + after)
157
+ else:
158
+ outfile.write(before.encode('utf-8'))
159
+ outfile.write(during.encode('utf-8'))
160
+ outfile.write(after.encode('utf-8'))
161
+ outfile.flush()
venv/lib/python3.10/site-packages/pip/_vendor/pygments/formatters/pangomarkup.py ADDED
@@ -0,0 +1,83 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.formatters.pangomarkup
3
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Formatter for Pango markup output.
6
+
7
+ :copyright: Copyright 2006-2021 by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ from pip._vendor.pygments.formatter import Formatter
12
+
13
+
14
+ __all__ = ['PangoMarkupFormatter']
15
+
16
+
17
+ _escape_table = {
18
+ ord('&'): '&amp;',
19
+ ord('<'): '&lt;',
20
+ }
21
+
22
+
23
+ def escape_special_chars(text, table=_escape_table):
24
+ """Escape & and < for Pango Markup."""
25
+ return text.translate(table)
26
+
27
+
28
+ class PangoMarkupFormatter(Formatter):
29
+ """
30
+ Format tokens as Pango Markup code. It can then be rendered to an SVG.
31
+
32
+ .. versionadded:: 2.9
33
+ """
34
+
35
+ name = 'Pango Markup'
36
+ aliases = ['pango', 'pangomarkup']
37
+ filenames = []
38
+
39
+ def __init__(self, **options):
40
+ Formatter.__init__(self, **options)
41
+
42
+ self.styles = {}
43
+
44
+ for token, style in self.style:
45
+ start = ''
46
+ end = ''
47
+ if style['color']:
48
+ start += '<span fgcolor="#%s">' % style['color']
49
+ end = '</span>' + end
50
+ if style['bold']:
51
+ start += '<b>'
52
+ end = '</b>' + end
53
+ if style['italic']:
54
+ start += '<i>'
55
+ end = '</i>' + end
56
+ if style['underline']:
57
+ start += '<u>'
58
+ end = '</u>' + end
59
+ self.styles[token] = (start, end)
60
+
61
+ def format_unencoded(self, tokensource, outfile):
62
+ lastval = ''
63
+ lasttype = None
64
+
65
+ outfile.write('<tt>')
66
+
67
+ for ttype, value in tokensource:
68
+ while ttype not in self.styles:
69
+ ttype = ttype.parent
70
+ if ttype == lasttype:
71
+ lastval += escape_special_chars(value)
72
+ else:
73
+ if lastval:
74
+ stylebegin, styleend = self.styles[lasttype]
75
+ outfile.write(stylebegin + lastval + styleend)
76
+ lastval = escape_special_chars(value)
77
+ lasttype = ttype
78
+
79
+ if lastval:
80
+ stylebegin, styleend = self.styles[lasttype]
81
+ outfile.write(stylebegin + lastval + styleend)
82
+
83
+ outfile.write('</tt>')
venv/lib/python3.10/site-packages/pip/_vendor/pygments/formatters/rtf.py ADDED
@@ -0,0 +1,146 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.formatters.rtf
3
+ ~~~~~~~~~~~~~~~~~~~~~~~
4
+
5
+ A formatter that generates RTF files.
6
+
7
+ :copyright: Copyright 2006-2021 by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ from pip._vendor.pygments.formatter import Formatter
12
+ from pip._vendor.pygments.util import get_int_opt, surrogatepair
13
+
14
+
15
+ __all__ = ['RtfFormatter']
16
+
17
+
18
+ class RtfFormatter(Formatter):
19
+ """
20
+ Format tokens as RTF markup. This formatter automatically outputs full RTF
21
+ documents with color information and other useful stuff. Perfect for Copy and
22
+ Paste into Microsoft(R) Word(R) documents.
23
+
24
+ Please note that ``encoding`` and ``outencoding`` options are ignored.
25
+ The RTF format is ASCII natively, but handles unicode characters correctly
26
+ thanks to escape sequences.
27
+
28
+ .. versionadded:: 0.6
29
+
30
+ Additional options accepted:
31
+
32
+ `style`
33
+ The style to use, can be a string or a Style subclass (default:
34
+ ``'default'``).
35
+
36
+ `fontface`
37
+ The used font family, for example ``Bitstream Vera Sans``. Defaults to
38
+ some generic font which is supposed to have fixed width.
39
+
40
+ `fontsize`
41
+ Size of the font used. Size is specified in half points. The
42
+ default is 24 half-points, giving a size 12 font.
43
+
44
+ .. versionadded:: 2.0
45
+ """
46
+ name = 'RTF'
47
+ aliases = ['rtf']
48
+ filenames = ['*.rtf']
49
+
50
+ def __init__(self, **options):
51
+ r"""
52
+ Additional options accepted:
53
+
54
+ ``fontface``
55
+ Name of the font used. Could for example be ``'Courier New'``
56
+ to further specify the default which is ``'\fmodern'``. The RTF
57
+ specification claims that ``\fmodern`` are "Fixed-pitch serif
58
+ and sans serif fonts". Hope every RTF implementation thinks
59
+ the same about modern...
60
+
61
+ """
62
+ Formatter.__init__(self, **options)
63
+ self.fontface = options.get('fontface') or ''
64
+ self.fontsize = get_int_opt(options, 'fontsize', 0)
65
+
66
+ def _escape(self, text):
67
+ return text.replace('\\', '\\\\') \
68
+ .replace('{', '\\{') \
69
+ .replace('}', '\\}')
70
+
71
+ def _escape_text(self, text):
72
+ # empty strings, should give a small performance improvement
73
+ if not text:
74
+ return ''
75
+
76
+ # escape text
77
+ text = self._escape(text)
78
+
79
+ buf = []
80
+ for c in text:
81
+ cn = ord(c)
82
+ if cn < (2**7):
83
+ # ASCII character
84
+ buf.append(str(c))
85
+ elif (2**7) <= cn < (2**16):
86
+ # single unicode escape sequence
87
+ buf.append('{\\u%d}' % cn)
88
+ elif (2**16) <= cn:
89
+ # RTF limits unicode to 16 bits.
90
+ # Force surrogate pairs
91
+ buf.append('{\\u%d}{\\u%d}' % surrogatepair(cn))
92
+
93
+ return ''.join(buf).replace('\n', '\\par\n')
94
+
95
+ def format_unencoded(self, tokensource, outfile):
96
+ # rtf 1.8 header
97
+ outfile.write('{\\rtf1\\ansi\\uc0\\deff0'
98
+ '{\\fonttbl{\\f0\\fmodern\\fprq1\\fcharset0%s;}}'
99
+ '{\\colortbl;' % (self.fontface and
100
+ ' ' + self._escape(self.fontface) or
101
+ ''))
102
+
103
+ # convert colors and save them in a mapping to access them later.
104
+ color_mapping = {}
105
+ offset = 1
106
+ for _, style in self.style:
107
+ for color in style['color'], style['bgcolor'], style['border']:
108
+ if color and color not in color_mapping:
109
+ color_mapping[color] = offset
110
+ outfile.write('\\red%d\\green%d\\blue%d;' % (
111
+ int(color[0:2], 16),
112
+ int(color[2:4], 16),
113
+ int(color[4:6], 16)
114
+ ))
115
+ offset += 1
116
+ outfile.write('}\\f0 ')
117
+ if self.fontsize:
118
+ outfile.write('\\fs%d' % self.fontsize)
119
+
120
+ # highlight stream
121
+ for ttype, value in tokensource:
122
+ while not self.style.styles_token(ttype) and ttype.parent:
123
+ ttype = ttype.parent
124
+ style = self.style.style_for_token(ttype)
125
+ buf = []
126
+ if style['bgcolor']:
127
+ buf.append('\\cb%d' % color_mapping[style['bgcolor']])
128
+ if style['color']:
129
+ buf.append('\\cf%d' % color_mapping[style['color']])
130
+ if style['bold']:
131
+ buf.append('\\b')
132
+ if style['italic']:
133
+ buf.append('\\i')
134
+ if style['underline']:
135
+ buf.append('\\ul')
136
+ if style['border']:
137
+ buf.append('\\chbrdr\\chcfpat%d' %
138
+ color_mapping[style['border']])
139
+ start = ''.join(buf)
140
+ if start:
141
+ outfile.write('{%s ' % start)
142
+ outfile.write(self._escape_text(value))
143
+ if start:
144
+ outfile.write('}')
145
+
146
+ outfile.write('}')
venv/lib/python3.10/site-packages/pip/_vendor/pygments/formatters/svg.py ADDED
@@ -0,0 +1,188 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.formatters.svg
3
+ ~~~~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Formatter for SVG output.
6
+
7
+ :copyright: Copyright 2006-2021 by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ from pip._vendor.pygments.formatter import Formatter
12
+ from pip._vendor.pygments.token import Comment
13
+ from pip._vendor.pygments.util import get_bool_opt, get_int_opt
14
+
15
+ __all__ = ['SvgFormatter']
16
+
17
+
18
+ def escape_html(text):
19
+ """Escape &, <, > as well as single and double quotes for HTML."""
20
+ return text.replace('&', '&amp;'). \
21
+ replace('<', '&lt;'). \
22
+ replace('>', '&gt;'). \
23
+ replace('"', '&quot;'). \
24
+ replace("'", '&#39;')
25
+
26
+
27
+ class2style = {}
28
+
29
+ class SvgFormatter(Formatter):
30
+ """
31
+ Format tokens as an SVG graphics file. This formatter is still experimental.
32
+ Each line of code is a ``<text>`` element with explicit ``x`` and ``y``
33
+ coordinates containing ``<tspan>`` elements with the individual token styles.
34
+
35
+ By default, this formatter outputs a full SVG document including doctype
36
+ declaration and the ``<svg>`` root element.
37
+
38
+ .. versionadded:: 0.9
39
+
40
+ Additional options accepted:
41
+
42
+ `nowrap`
43
+ Don't wrap the SVG ``<text>`` elements in ``<svg><g>`` elements and
44
+ don't add a XML declaration and a doctype. If true, the `fontfamily`
45
+ and `fontsize` options are ignored. Defaults to ``False``.
46
+
47
+ `fontfamily`
48
+ The value to give the wrapping ``<g>`` element's ``font-family``
49
+ attribute, defaults to ``"monospace"``.
50
+
51
+ `fontsize`
52
+ The value to give the wrapping ``<g>`` element's ``font-size``
53
+ attribute, defaults to ``"14px"``.
54
+
55
+ `linenos`
56
+ If ``True``, add line numbers (default: ``False``).
57
+
58
+ `linenostart`
59
+ The line number for the first line (default: ``1``).
60
+
61
+ `linenostep`
62
+ If set to a number n > 1, only every nth line number is printed.
63
+
64
+ `linenowidth`
65
+ Maximum width devoted to line numbers (default: ``3*ystep``, sufficient
66
+ for up to 4-digit line numbers. Increase width for longer code blocks).
67
+
68
+ `xoffset`
69
+ Starting offset in X direction, defaults to ``0``.
70
+
71
+ `yoffset`
72
+ Starting offset in Y direction, defaults to the font size if it is given
73
+ in pixels, or ``20`` else. (This is necessary since text coordinates
74
+ refer to the text baseline, not the top edge.)
75
+
76
+ `ystep`
77
+ Offset to add to the Y coordinate for each subsequent line. This should
78
+ roughly be the text size plus 5. It defaults to that value if the text
79
+ size is given in pixels, or ``25`` else.
80
+
81
+ `spacehack`
82
+ Convert spaces in the source to ``&#160;``, which are non-breaking
83
+ spaces. SVG provides the ``xml:space`` attribute to control how
84
+ whitespace inside tags is handled, in theory, the ``preserve`` value
85
+ could be used to keep all whitespace as-is. However, many current SVG
86
+ viewers don't obey that rule, so this option is provided as a workaround
87
+ and defaults to ``True``.
88
+ """
89
+ name = 'SVG'
90
+ aliases = ['svg']
91
+ filenames = ['*.svg']
92
+
93
+ def __init__(self, **options):
94
+ Formatter.__init__(self, **options)
95
+ self.nowrap = get_bool_opt(options, 'nowrap', False)
96
+ self.fontfamily = options.get('fontfamily', 'monospace')
97
+ self.fontsize = options.get('fontsize', '14px')
98
+ self.xoffset = get_int_opt(options, 'xoffset', 0)
99
+ fs = self.fontsize.strip()
100
+ if fs.endswith('px'): fs = fs[:-2].strip()
101
+ try:
102
+ int_fs = int(fs)
103
+ except:
104
+ int_fs = 20
105
+ self.yoffset = get_int_opt(options, 'yoffset', int_fs)
106
+ self.ystep = get_int_opt(options, 'ystep', int_fs + 5)
107
+ self.spacehack = get_bool_opt(options, 'spacehack', True)
108
+ self.linenos = get_bool_opt(options,'linenos',False)
109
+ self.linenostart = get_int_opt(options,'linenostart',1)
110
+ self.linenostep = get_int_opt(options,'linenostep',1)
111
+ self.linenowidth = get_int_opt(options,'linenowidth', 3*self.ystep)
112
+ self._stylecache = {}
113
+
114
+ def format_unencoded(self, tokensource, outfile):
115
+ """
116
+ Format ``tokensource``, an iterable of ``(tokentype, tokenstring)``
117
+ tuples and write it into ``outfile``.
118
+
119
+ For our implementation we put all lines in their own 'line group'.
120
+ """
121
+ x = self.xoffset
122
+ y = self.yoffset
123
+ if not self.nowrap:
124
+ if self.encoding:
125
+ outfile.write('<?xml version="1.0" encoding="%s"?>\n' %
126
+ self.encoding)
127
+ else:
128
+ outfile.write('<?xml version="1.0"?>\n')
129
+ outfile.write('<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" '
130
+ '"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/'
131
+ 'svg10.dtd">\n')
132
+ outfile.write('<svg xmlns="http://www.w3.org/2000/svg">\n')
133
+ outfile.write('<g font-family="%s" font-size="%s">\n' %
134
+ (self.fontfamily, self.fontsize))
135
+
136
+ counter = self.linenostart
137
+ counter_step = self.linenostep
138
+ counter_style = self._get_style(Comment)
139
+ line_x = x
140
+
141
+ if self.linenos:
142
+ if counter % counter_step == 0:
143
+ outfile.write('<text x="%s" y="%s" %s text-anchor="end">%s</text>' %
144
+ (x+self.linenowidth,y,counter_style,counter))
145
+ line_x += self.linenowidth + self.ystep
146
+ counter += 1
147
+
148
+ outfile.write('<text x="%s" y="%s" xml:space="preserve">' % (line_x, y))
149
+ for ttype, value in tokensource:
150
+ style = self._get_style(ttype)
151
+ tspan = style and '<tspan' + style + '>' or ''
152
+ tspanend = tspan and '</tspan>' or ''
153
+ value = escape_html(value)
154
+ if self.spacehack:
155
+ value = value.expandtabs().replace(' ', '&#160;')
156
+ parts = value.split('\n')
157
+ for part in parts[:-1]:
158
+ outfile.write(tspan + part + tspanend)
159
+ y += self.ystep
160
+ outfile.write('</text>\n')
161
+ if self.linenos and counter % counter_step == 0:
162
+ outfile.write('<text x="%s" y="%s" text-anchor="end" %s>%s</text>' %
163
+ (x+self.linenowidth,y,counter_style,counter))
164
+
165
+ counter += 1
166
+ outfile.write('<text x="%s" y="%s" ' 'xml:space="preserve">' % (line_x,y))
167
+ outfile.write(tspan + parts[-1] + tspanend)
168
+ outfile.write('</text>')
169
+
170
+ if not self.nowrap:
171
+ outfile.write('</g></svg>\n')
172
+
173
+ def _get_style(self, tokentype):
174
+ if tokentype in self._stylecache:
175
+ return self._stylecache[tokentype]
176
+ otokentype = tokentype
177
+ while not self.style.styles_token(tokentype):
178
+ tokentype = tokentype.parent
179
+ value = self.style.style_for_token(tokentype)
180
+ result = ''
181
+ if value['color']:
182
+ result = ' fill="#' + value['color'] + '"'
183
+ if value['bold']:
184
+ result += ' font-weight="bold"'
185
+ if value['italic']:
186
+ result += ' font-style="italic"'
187
+ self._stylecache[otokentype] = result
188
+ return result
venv/lib/python3.10/site-packages/pip/_vendor/pygments/formatters/terminal.py ADDED
@@ -0,0 +1,127 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.formatters.terminal
3
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Formatter for terminal output with ANSI sequences.
6
+
7
+ :copyright: Copyright 2006-2021 by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ from pip._vendor.pygments.formatter import Formatter
12
+ from pip._vendor.pygments.token import Keyword, Name, Comment, String, Error, \
13
+ Number, Operator, Generic, Token, Whitespace
14
+ from pip._vendor.pygments.console import ansiformat
15
+ from pip._vendor.pygments.util import get_choice_opt
16
+
17
+
18
+ __all__ = ['TerminalFormatter']
19
+
20
+
21
+ #: Map token types to a tuple of color values for light and dark
22
+ #: backgrounds.
23
+ TERMINAL_COLORS = {
24
+ Token: ('', ''),
25
+
26
+ Whitespace: ('gray', 'brightblack'),
27
+ Comment: ('gray', 'brightblack'),
28
+ Comment.Preproc: ('cyan', 'brightcyan'),
29
+ Keyword: ('blue', 'brightblue'),
30
+ Keyword.Type: ('cyan', 'brightcyan'),
31
+ Operator.Word: ('magenta', 'brightmagenta'),
32
+ Name.Builtin: ('cyan', 'brightcyan'),
33
+ Name.Function: ('green', 'brightgreen'),
34
+ Name.Namespace: ('_cyan_', '_brightcyan_'),
35
+ Name.Class: ('_green_', '_brightgreen_'),
36
+ Name.Exception: ('cyan', 'brightcyan'),
37
+ Name.Decorator: ('brightblack', 'gray'),
38
+ Name.Variable: ('red', 'brightred'),
39
+ Name.Constant: ('red', 'brightred'),
40
+ Name.Attribute: ('cyan', 'brightcyan'),
41
+ Name.Tag: ('brightblue', 'brightblue'),
42
+ String: ('yellow', 'yellow'),
43
+ Number: ('blue', 'brightblue'),
44
+
45
+ Generic.Deleted: ('brightred', 'brightred'),
46
+ Generic.Inserted: ('green', 'brightgreen'),
47
+ Generic.Heading: ('**', '**'),
48
+ Generic.Subheading: ('*magenta*', '*brightmagenta*'),
49
+ Generic.Prompt: ('**', '**'),
50
+ Generic.Error: ('brightred', 'brightred'),
51
+
52
+ Error: ('_brightred_', '_brightred_'),
53
+ }
54
+
55
+
56
+ class TerminalFormatter(Formatter):
57
+ r"""
58
+ Format tokens with ANSI color sequences, for output in a text console.
59
+ Color sequences are terminated at newlines, so that paging the output
60
+ works correctly.
61
+
62
+ The `get_style_defs()` method doesn't do anything special since there is
63
+ no support for common styles.
64
+
65
+ Options accepted:
66
+
67
+ `bg`
68
+ Set to ``"light"`` or ``"dark"`` depending on the terminal's background
69
+ (default: ``"light"``).
70
+
71
+ `colorscheme`
72
+ A dictionary mapping token types to (lightbg, darkbg) color names or
73
+ ``None`` (default: ``None`` = use builtin colorscheme).
74
+
75
+ `linenos`
76
+ Set to ``True`` to have line numbers on the terminal output as well
77
+ (default: ``False`` = no line numbers).
78
+ """
79
+ name = 'Terminal'
80
+ aliases = ['terminal', 'console']
81
+ filenames = []
82
+
83
+ def __init__(self, **options):
84
+ Formatter.__init__(self, **options)
85
+ self.darkbg = get_choice_opt(options, 'bg',
86
+ ['light', 'dark'], 'light') == 'dark'
87
+ self.colorscheme = options.get('colorscheme', None) or TERMINAL_COLORS
88
+ self.linenos = options.get('linenos', False)
89
+ self._lineno = 0
90
+
91
+ def format(self, tokensource, outfile):
92
+ return Formatter.format(self, tokensource, outfile)
93
+
94
+ def _write_lineno(self, outfile):
95
+ self._lineno += 1
96
+ outfile.write("%s%04d: " % (self._lineno != 1 and '\n' or '', self._lineno))
97
+
98
+ def _get_color(self, ttype):
99
+ # self.colorscheme is a dict containing usually generic types, so we
100
+ # have to walk the tree of dots. The base Token type must be a key,
101
+ # even if it's empty string, as in the default above.
102
+ colors = self.colorscheme.get(ttype)
103
+ while colors is None:
104
+ ttype = ttype.parent
105
+ colors = self.colorscheme.get(ttype)
106
+ return colors[self.darkbg]
107
+
108
+ def format_unencoded(self, tokensource, outfile):
109
+ if self.linenos:
110
+ self._write_lineno(outfile)
111
+
112
+ for ttype, value in tokensource:
113
+ color = self._get_color(ttype)
114
+
115
+ for line in value.splitlines(True):
116
+ if color:
117
+ outfile.write(ansiformat(color, line.rstrip('\n')))
118
+ else:
119
+ outfile.write(line.rstrip('\n'))
120
+ if line.endswith('\n'):
121
+ if self.linenos:
122
+ self._write_lineno(outfile)
123
+ else:
124
+ outfile.write('\n')
125
+
126
+ if self.linenos:
127
+ outfile.write("\n")
venv/lib/python3.10/site-packages/pip/_vendor/pygments/formatters/terminal256.py ADDED
@@ -0,0 +1,338 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.formatters.terminal256
3
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Formatter for 256-color terminal output with ANSI sequences.
6
+
7
+ RGB-to-XTERM color conversion routines adapted from xterm256-conv
8
+ tool (http://frexx.de/xterm-256-notes/data/xterm256-conv2.tar.bz2)
9
+ by Wolfgang Frisch.
10
+
11
+ Formatter version 1.
12
+
13
+ :copyright: Copyright 2006-2021 by the Pygments team, see AUTHORS.
14
+ :license: BSD, see LICENSE for details.
15
+ """
16
+
17
+ # TODO:
18
+ # - Options to map style's bold/underline/italic/border attributes
19
+ # to some ANSI attrbutes (something like 'italic=underline')
20
+ # - An option to output "style RGB to xterm RGB/index" conversion table
21
+ # - An option to indicate that we are running in "reverse background"
22
+ # xterm. This means that default colors are white-on-black, not
23
+ # black-on-while, so colors like "white background" need to be converted
24
+ # to "white background, black foreground", etc...
25
+
26
+ from pip._vendor.pygments.formatter import Formatter
27
+ from pip._vendor.pygments.console import codes
28
+ from pip._vendor.pygments.style import ansicolors
29
+
30
+
31
+ __all__ = ['Terminal256Formatter', 'TerminalTrueColorFormatter']
32
+
33
+
34
+ class EscapeSequence:
35
+ def __init__(self, fg=None, bg=None, bold=False, underline=False, italic=False):
36
+ self.fg = fg
37
+ self.bg = bg
38
+ self.bold = bold
39
+ self.underline = underline
40
+ self.italic = italic
41
+
42
+ def escape(self, attrs):
43
+ if len(attrs):
44
+ return "\x1b[" + ";".join(attrs) + "m"
45
+ return ""
46
+
47
+ def color_string(self):
48
+ attrs = []
49
+ if self.fg is not None:
50
+ if self.fg in ansicolors:
51
+ esc = codes[self.fg.replace('ansi','')]
52
+ if ';01m' in esc:
53
+ self.bold = True
54
+ # extract fg color code.
55
+ attrs.append(esc[2:4])
56
+ else:
57
+ attrs.extend(("38", "5", "%i" % self.fg))
58
+ if self.bg is not None:
59
+ if self.bg in ansicolors:
60
+ esc = codes[self.bg.replace('ansi','')]
61
+ # extract fg color code, add 10 for bg.
62
+ attrs.append(str(int(esc[2:4])+10))
63
+ else:
64
+ attrs.extend(("48", "5", "%i" % self.bg))
65
+ if self.bold:
66
+ attrs.append("01")
67
+ if self.underline:
68
+ attrs.append("04")
69
+ if self.italic:
70
+ attrs.append("03")
71
+ return self.escape(attrs)
72
+
73
+ def true_color_string(self):
74
+ attrs = []
75
+ if self.fg:
76
+ attrs.extend(("38", "2", str(self.fg[0]), str(self.fg[1]), str(self.fg[2])))
77
+ if self.bg:
78
+ attrs.extend(("48", "2", str(self.bg[0]), str(self.bg[1]), str(self.bg[2])))
79
+ if self.bold:
80
+ attrs.append("01")
81
+ if self.underline:
82
+ attrs.append("04")
83
+ if self.italic:
84
+ attrs.append("03")
85
+ return self.escape(attrs)
86
+
87
+ def reset_string(self):
88
+ attrs = []
89
+ if self.fg is not None:
90
+ attrs.append("39")
91
+ if self.bg is not None:
92
+ attrs.append("49")
93
+ if self.bold or self.underline or self.italic:
94
+ attrs.append("00")
95
+ return self.escape(attrs)
96
+
97
+
98
+ class Terminal256Formatter(Formatter):
99
+ """
100
+ Format tokens with ANSI color sequences, for output in a 256-color
101
+ terminal or console. Like in `TerminalFormatter` color sequences
102
+ are terminated at newlines, so that paging the output works correctly.
103
+
104
+ The formatter takes colors from a style defined by the `style` option
105
+ and converts them to nearest ANSI 256-color escape sequences. Bold and
106
+ underline attributes from the style are preserved (and displayed).
107
+
108
+ .. versionadded:: 0.9
109
+
110
+ .. versionchanged:: 2.2
111
+ If the used style defines foreground colors in the form ``#ansi*``, then
112
+ `Terminal256Formatter` will map these to non extended foreground color.
113
+ See :ref:`AnsiTerminalStyle` for more information.
114
+
115
+ .. versionchanged:: 2.4
116
+ The ANSI color names have been updated with names that are easier to
117
+ understand and align with colornames of other projects and terminals.
118
+ See :ref:`this table <new-ansi-color-names>` for more information.
119
+
120
+
121
+ Options accepted:
122
+
123
+ `style`
124
+ The style to use, can be a string or a Style subclass (default:
125
+ ``'default'``).
126
+
127
+ `linenos`
128
+ Set to ``True`` to have line numbers on the terminal output as well
129
+ (default: ``False`` = no line numbers).
130
+ """
131
+ name = 'Terminal256'
132
+ aliases = ['terminal256', 'console256', '256']
133
+ filenames = []
134
+
135
+ def __init__(self, **options):
136
+ Formatter.__init__(self, **options)
137
+
138
+ self.xterm_colors = []
139
+ self.best_match = {}
140
+ self.style_string = {}
141
+
142
+ self.usebold = 'nobold' not in options
143
+ self.useunderline = 'nounderline' not in options
144
+ self.useitalic = 'noitalic' not in options
145
+
146
+ self._build_color_table() # build an RGB-to-256 color conversion table
147
+ self._setup_styles() # convert selected style's colors to term. colors
148
+
149
+ self.linenos = options.get('linenos', False)
150
+ self._lineno = 0
151
+
152
+ def _build_color_table(self):
153
+ # colors 0..15: 16 basic colors
154
+
155
+ self.xterm_colors.append((0x00, 0x00, 0x00)) # 0
156
+ self.xterm_colors.append((0xcd, 0x00, 0x00)) # 1
157
+ self.xterm_colors.append((0x00, 0xcd, 0x00)) # 2
158
+ self.xterm_colors.append((0xcd, 0xcd, 0x00)) # 3
159
+ self.xterm_colors.append((0x00, 0x00, 0xee)) # 4
160
+ self.xterm_colors.append((0xcd, 0x00, 0xcd)) # 5
161
+ self.xterm_colors.append((0x00, 0xcd, 0xcd)) # 6
162
+ self.xterm_colors.append((0xe5, 0xe5, 0xe5)) # 7
163
+ self.xterm_colors.append((0x7f, 0x7f, 0x7f)) # 8
164
+ self.xterm_colors.append((0xff, 0x00, 0x00)) # 9
165
+ self.xterm_colors.append((0x00, 0xff, 0x00)) # 10
166
+ self.xterm_colors.append((0xff, 0xff, 0x00)) # 11
167
+ self.xterm_colors.append((0x5c, 0x5c, 0xff)) # 12
168
+ self.xterm_colors.append((0xff, 0x00, 0xff)) # 13
169
+ self.xterm_colors.append((0x00, 0xff, 0xff)) # 14
170
+ self.xterm_colors.append((0xff, 0xff, 0xff)) # 15
171
+
172
+ # colors 16..232: the 6x6x6 color cube
173
+
174
+ valuerange = (0x00, 0x5f, 0x87, 0xaf, 0xd7, 0xff)
175
+
176
+ for i in range(217):
177
+ r = valuerange[(i // 36) % 6]
178
+ g = valuerange[(i // 6) % 6]
179
+ b = valuerange[i % 6]
180
+ self.xterm_colors.append((r, g, b))
181
+
182
+ # colors 233..253: grayscale
183
+
184
+ for i in range(1, 22):
185
+ v = 8 + i * 10
186
+ self.xterm_colors.append((v, v, v))
187
+
188
+ def _closest_color(self, r, g, b):
189
+ distance = 257*257*3 # "infinity" (>distance from #000000 to #ffffff)
190
+ match = 0
191
+
192
+ for i in range(0, 254):
193
+ values = self.xterm_colors[i]
194
+
195
+ rd = r - values[0]
196
+ gd = g - values[1]
197
+ bd = b - values[2]
198
+ d = rd*rd + gd*gd + bd*bd
199
+
200
+ if d < distance:
201
+ match = i
202
+ distance = d
203
+ return match
204
+
205
+ def _color_index(self, color):
206
+ index = self.best_match.get(color, None)
207
+ if color in ansicolors:
208
+ # strip the `ansi/#ansi` part and look up code
209
+ index = color
210
+ self.best_match[color] = index
211
+ if index is None:
212
+ try:
213
+ rgb = int(str(color), 16)
214
+ except ValueError:
215
+ rgb = 0
216
+
217
+ r = (rgb >> 16) & 0xff
218
+ g = (rgb >> 8) & 0xff
219
+ b = rgb & 0xff
220
+ index = self._closest_color(r, g, b)
221
+ self.best_match[color] = index
222
+ return index
223
+
224
+ def _setup_styles(self):
225
+ for ttype, ndef in self.style:
226
+ escape = EscapeSequence()
227
+ # get foreground from ansicolor if set
228
+ if ndef['ansicolor']:
229
+ escape.fg = self._color_index(ndef['ansicolor'])
230
+ elif ndef['color']:
231
+ escape.fg = self._color_index(ndef['color'])
232
+ if ndef['bgansicolor']:
233
+ escape.bg = self._color_index(ndef['bgansicolor'])
234
+ elif ndef['bgcolor']:
235
+ escape.bg = self._color_index(ndef['bgcolor'])
236
+ if self.usebold and ndef['bold']:
237
+ escape.bold = True
238
+ if self.useunderline and ndef['underline']:
239
+ escape.underline = True
240
+ if self.useitalic and ndef['italic']:
241
+ escape.italic = True
242
+ self.style_string[str(ttype)] = (escape.color_string(),
243
+ escape.reset_string())
244
+
245
+ def _write_lineno(self, outfile):
246
+ self._lineno += 1
247
+ outfile.write("%s%04d: " % (self._lineno != 1 and '\n' or '', self._lineno))
248
+
249
+ def format(self, tokensource, outfile):
250
+ return Formatter.format(self, tokensource, outfile)
251
+
252
+ def format_unencoded(self, tokensource, outfile):
253
+ if self.linenos:
254
+ self._write_lineno(outfile)
255
+
256
+ for ttype, value in tokensource:
257
+ not_found = True
258
+ while ttype and not_found:
259
+ try:
260
+ # outfile.write( "<" + str(ttype) + ">" )
261
+ on, off = self.style_string[str(ttype)]
262
+
263
+ # Like TerminalFormatter, add "reset colors" escape sequence
264
+ # on newline.
265
+ spl = value.split('\n')
266
+ for line in spl[:-1]:
267
+ if line:
268
+ outfile.write(on + line + off)
269
+ if self.linenos:
270
+ self._write_lineno(outfile)
271
+ else:
272
+ outfile.write('\n')
273
+
274
+ if spl[-1]:
275
+ outfile.write(on + spl[-1] + off)
276
+
277
+ not_found = False
278
+ # outfile.write( '#' + str(ttype) + '#' )
279
+
280
+ except KeyError:
281
+ # ottype = ttype
282
+ ttype = ttype.parent
283
+ # outfile.write( '!' + str(ottype) + '->' + str(ttype) + '!' )
284
+
285
+ if not_found:
286
+ outfile.write(value)
287
+
288
+ if self.linenos:
289
+ outfile.write("\n")
290
+
291
+
292
+
293
+ class TerminalTrueColorFormatter(Terminal256Formatter):
294
+ r"""
295
+ Format tokens with ANSI color sequences, for output in a true-color
296
+ terminal or console. Like in `TerminalFormatter` color sequences
297
+ are terminated at newlines, so that paging the output works correctly.
298
+
299
+ .. versionadded:: 2.1
300
+
301
+ Options accepted:
302
+
303
+ `style`
304
+ The style to use, can be a string or a Style subclass (default:
305
+ ``'default'``).
306
+ """
307
+ name = 'TerminalTrueColor'
308
+ aliases = ['terminal16m', 'console16m', '16m']
309
+ filenames = []
310
+
311
+ def _build_color_table(self):
312
+ pass
313
+
314
+ def _color_tuple(self, color):
315
+ try:
316
+ rgb = int(str(color), 16)
317
+ except ValueError:
318
+ return None
319
+ r = (rgb >> 16) & 0xff
320
+ g = (rgb >> 8) & 0xff
321
+ b = rgb & 0xff
322
+ return (r, g, b)
323
+
324
+ def _setup_styles(self):
325
+ for ttype, ndef in self.style:
326
+ escape = EscapeSequence()
327
+ if ndef['color']:
328
+ escape.fg = self._color_tuple(ndef['color'])
329
+ if ndef['bgcolor']:
330
+ escape.bg = self._color_tuple(ndef['bgcolor'])
331
+ if self.usebold and ndef['bold']:
332
+ escape.bold = True
333
+ if self.useunderline and ndef['underline']:
334
+ escape.underline = True
335
+ if self.useitalic and ndef['italic']:
336
+ escape.italic = True
337
+ self.style_string[str(ttype)] = (escape.true_color_string(),
338
+ escape.reset_string())
venv/lib/python3.10/site-packages/pip/_vendor/pygments/lexers/__init__.py ADDED
@@ -0,0 +1,341 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.lexers
3
+ ~~~~~~~~~~~~~~~
4
+
5
+ Pygments lexers.
6
+
7
+ :copyright: Copyright 2006-2021 by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ import re
12
+ import sys
13
+ import types
14
+ import fnmatch
15
+ from os.path import basename
16
+
17
+ from pip._vendor.pygments.lexers._mapping import LEXERS
18
+ from pip._vendor.pygments.modeline import get_filetype_from_buffer
19
+ from pip._vendor.pygments.plugin import find_plugin_lexers
20
+ from pip._vendor.pygments.util import ClassNotFound, guess_decode
21
+
22
+ COMPAT = {
23
+ 'Python3Lexer': 'PythonLexer',
24
+ 'Python3TracebackLexer': 'PythonTracebackLexer',
25
+ }
26
+
27
+ __all__ = ['get_lexer_by_name', 'get_lexer_for_filename', 'find_lexer_class',
28
+ 'guess_lexer', 'load_lexer_from_file'] + list(LEXERS) + list(COMPAT)
29
+
30
+ _lexer_cache = {}
31
+ _pattern_cache = {}
32
+
33
+
34
+ def _fn_matches(fn, glob):
35
+ """Return whether the supplied file name fn matches pattern filename."""
36
+ if glob not in _pattern_cache:
37
+ pattern = _pattern_cache[glob] = re.compile(fnmatch.translate(glob))
38
+ return pattern.match(fn)
39
+ return _pattern_cache[glob].match(fn)
40
+
41
+
42
+ def _load_lexers(module_name):
43
+ """Load a lexer (and all others in the module too)."""
44
+ mod = __import__(module_name, None, None, ['__all__'])
45
+ for lexer_name in mod.__all__:
46
+ cls = getattr(mod, lexer_name)
47
+ _lexer_cache[cls.name] = cls
48
+
49
+
50
+ def get_all_lexers():
51
+ """Return a generator of tuples in the form ``(name, aliases,
52
+ filenames, mimetypes)`` of all know lexers.
53
+ """
54
+ for item in LEXERS.values():
55
+ yield item[1:]
56
+ for lexer in find_plugin_lexers():
57
+ yield lexer.name, lexer.aliases, lexer.filenames, lexer.mimetypes
58
+
59
+
60
+ def find_lexer_class(name):
61
+ """Lookup a lexer class by name.
62
+
63
+ Return None if not found.
64
+ """
65
+ if name in _lexer_cache:
66
+ return _lexer_cache[name]
67
+ # lookup builtin lexers
68
+ for module_name, lname, aliases, _, _ in LEXERS.values():
69
+ if name == lname:
70
+ _load_lexers(module_name)
71
+ return _lexer_cache[name]
72
+ # continue with lexers from setuptools entrypoints
73
+ for cls in find_plugin_lexers():
74
+ if cls.name == name:
75
+ return cls
76
+
77
+
78
+ def find_lexer_class_by_name(_alias):
79
+ """Lookup a lexer class by alias.
80
+
81
+ Like `get_lexer_by_name`, but does not instantiate the class.
82
+
83
+ .. versionadded:: 2.2
84
+ """
85
+ if not _alias:
86
+ raise ClassNotFound('no lexer for alias %r found' % _alias)
87
+ # lookup builtin lexers
88
+ for module_name, name, aliases, _, _ in LEXERS.values():
89
+ if _alias.lower() in aliases:
90
+ if name not in _lexer_cache:
91
+ _load_lexers(module_name)
92
+ return _lexer_cache[name]
93
+ # continue with lexers from setuptools entrypoints
94
+ for cls in find_plugin_lexers():
95
+ if _alias.lower() in cls.aliases:
96
+ return cls
97
+ raise ClassNotFound('no lexer for alias %r found' % _alias)
98
+
99
+
100
+ def get_lexer_by_name(_alias, **options):
101
+ """Get a lexer by an alias.
102
+
103
+ Raises ClassNotFound if not found.
104
+ """
105
+ if not _alias:
106
+ raise ClassNotFound('no lexer for alias %r found' % _alias)
107
+
108
+ # lookup builtin lexers
109
+ for module_name, name, aliases, _, _ in LEXERS.values():
110
+ if _alias.lower() in aliases:
111
+ if name not in _lexer_cache:
112
+ _load_lexers(module_name)
113
+ return _lexer_cache[name](**options)
114
+ # continue with lexers from setuptools entrypoints
115
+ for cls in find_plugin_lexers():
116
+ if _alias.lower() in cls.aliases:
117
+ return cls(**options)
118
+ raise ClassNotFound('no lexer for alias %r found' % _alias)
119
+
120
+
121
+ def load_lexer_from_file(filename, lexername="CustomLexer", **options):
122
+ """Load a lexer from a file.
123
+
124
+ This method expects a file located relative to the current working
125
+ directory, which contains a Lexer class. By default, it expects the
126
+ Lexer to be name CustomLexer; you can specify your own class name
127
+ as the second argument to this function.
128
+
129
+ Users should be very careful with the input, because this method
130
+ is equivalent to running eval on the input file.
131
+
132
+ Raises ClassNotFound if there are any problems importing the Lexer.
133
+
134
+ .. versionadded:: 2.2
135
+ """
136
+ try:
137
+ # This empty dict will contain the namespace for the exec'd file
138
+ custom_namespace = {}
139
+ with open(filename, 'rb') as f:
140
+ exec(f.read(), custom_namespace)
141
+ # Retrieve the class `lexername` from that namespace
142
+ if lexername not in custom_namespace:
143
+ raise ClassNotFound('no valid %s class found in %s' %
144
+ (lexername, filename))
145
+ lexer_class = custom_namespace[lexername]
146
+ # And finally instantiate it with the options
147
+ return lexer_class(**options)
148
+ except OSError as err:
149
+ raise ClassNotFound('cannot read %s: %s' % (filename, err))
150
+ except ClassNotFound:
151
+ raise
152
+ except Exception as err:
153
+ raise ClassNotFound('error when loading custom lexer: %s' % err)
154
+
155
+
156
+ def find_lexer_class_for_filename(_fn, code=None):
157
+ """Get a lexer for a filename.
158
+
159
+ If multiple lexers match the filename pattern, use ``analyse_text()`` to
160
+ figure out which one is more appropriate.
161
+
162
+ Returns None if not found.
163
+ """
164
+ matches = []
165
+ fn = basename(_fn)
166
+ for modname, name, _, filenames, _ in LEXERS.values():
167
+ for filename in filenames:
168
+ if _fn_matches(fn, filename):
169
+ if name not in _lexer_cache:
170
+ _load_lexers(modname)
171
+ matches.append((_lexer_cache[name], filename))
172
+ for cls in find_plugin_lexers():
173
+ for filename in cls.filenames:
174
+ if _fn_matches(fn, filename):
175
+ matches.append((cls, filename))
176
+
177
+ if isinstance(code, bytes):
178
+ # decode it, since all analyse_text functions expect unicode
179
+ code = guess_decode(code)
180
+
181
+ def get_rating(info):
182
+ cls, filename = info
183
+ # explicit patterns get a bonus
184
+ bonus = '*' not in filename and 0.5 or 0
185
+ # The class _always_ defines analyse_text because it's included in
186
+ # the Lexer class. The default implementation returns None which
187
+ # gets turned into 0.0. Run scripts/detect_missing_analyse_text.py
188
+ # to find lexers which need it overridden.
189
+ if code:
190
+ return cls.analyse_text(code) + bonus, cls.__name__
191
+ return cls.priority + bonus, cls.__name__
192
+
193
+ if matches:
194
+ matches.sort(key=get_rating)
195
+ # print "Possible lexers, after sort:", matches
196
+ return matches[-1][0]
197
+
198
+
199
+ def get_lexer_for_filename(_fn, code=None, **options):
200
+ """Get a lexer for a filename.
201
+
202
+ If multiple lexers match the filename pattern, use ``analyse_text()`` to
203
+ figure out which one is more appropriate.
204
+
205
+ Raises ClassNotFound if not found.
206
+ """
207
+ res = find_lexer_class_for_filename(_fn, code)
208
+ if not res:
209
+ raise ClassNotFound('no lexer for filename %r found' % _fn)
210
+ return res(**options)
211
+
212
+
213
+ def get_lexer_for_mimetype(_mime, **options):
214
+ """Get a lexer for a mimetype.
215
+
216
+ Raises ClassNotFound if not found.
217
+ """
218
+ for modname, name, _, _, mimetypes in LEXERS.values():
219
+ if _mime in mimetypes:
220
+ if name not in _lexer_cache:
221
+ _load_lexers(modname)
222
+ return _lexer_cache[name](**options)
223
+ for cls in find_plugin_lexers():
224
+ if _mime in cls.mimetypes:
225
+ return cls(**options)
226
+ raise ClassNotFound('no lexer for mimetype %r found' % _mime)
227
+
228
+
229
+ def _iter_lexerclasses(plugins=True):
230
+ """Return an iterator over all lexer classes."""
231
+ for key in sorted(LEXERS):
232
+ module_name, name = LEXERS[key][:2]
233
+ if name not in _lexer_cache:
234
+ _load_lexers(module_name)
235
+ yield _lexer_cache[name]
236
+ if plugins:
237
+ yield from find_plugin_lexers()
238
+
239
+
240
+ def guess_lexer_for_filename(_fn, _text, **options):
241
+ """
242
+ Lookup all lexers that handle those filenames primary (``filenames``)
243
+ or secondary (``alias_filenames``). Then run a text analysis for those
244
+ lexers and choose the best result.
245
+
246
+ usage::
247
+
248
+ >>> from pygments.lexers import guess_lexer_for_filename
249
+ >>> guess_lexer_for_filename('hello.html', '<%= @foo %>')
250
+ <pygments.lexers.templates.RhtmlLexer object at 0xb7d2f32c>
251
+ >>> guess_lexer_for_filename('hello.html', '<h1>{{ title|e }}</h1>')
252
+ <pygments.lexers.templates.HtmlDjangoLexer object at 0xb7d2f2ac>
253
+ >>> guess_lexer_for_filename('style.css', 'a { color: <?= $link ?> }')
254
+ <pygments.lexers.templates.CssPhpLexer object at 0xb7ba518c>
255
+ """
256
+ fn = basename(_fn)
257
+ primary = {}
258
+ matching_lexers = set()
259
+ for lexer in _iter_lexerclasses():
260
+ for filename in lexer.filenames:
261
+ if _fn_matches(fn, filename):
262
+ matching_lexers.add(lexer)
263
+ primary[lexer] = True
264
+ for filename in lexer.alias_filenames:
265
+ if _fn_matches(fn, filename):
266
+ matching_lexers.add(lexer)
267
+ primary[lexer] = False
268
+ if not matching_lexers:
269
+ raise ClassNotFound('no lexer for filename %r found' % fn)
270
+ if len(matching_lexers) == 1:
271
+ return matching_lexers.pop()(**options)
272
+ result = []
273
+ for lexer in matching_lexers:
274
+ rv = lexer.analyse_text(_text)
275
+ if rv == 1.0:
276
+ return lexer(**options)
277
+ result.append((rv, lexer))
278
+
279
+ def type_sort(t):
280
+ # sort by:
281
+ # - analyse score
282
+ # - is primary filename pattern?
283
+ # - priority
284
+ # - last resort: class name
285
+ return (t[0], primary[t[1]], t[1].priority, t[1].__name__)
286
+ result.sort(key=type_sort)
287
+
288
+ return result[-1][1](**options)
289
+
290
+
291
+ def guess_lexer(_text, **options):
292
+ """Guess a lexer by strong distinctions in the text (eg, shebang)."""
293
+
294
+ if not isinstance(_text, str):
295
+ inencoding = options.get('inencoding', options.get('encoding'))
296
+ if inencoding:
297
+ _text = _text.decode(inencoding or 'utf8')
298
+ else:
299
+ _text, _ = guess_decode(_text)
300
+
301
+ # try to get a vim modeline first
302
+ ft = get_filetype_from_buffer(_text)
303
+
304
+ if ft is not None:
305
+ try:
306
+ return get_lexer_by_name(ft, **options)
307
+ except ClassNotFound:
308
+ pass
309
+
310
+ best_lexer = [0.0, None]
311
+ for lexer in _iter_lexerclasses():
312
+ rv = lexer.analyse_text(_text)
313
+ if rv == 1.0:
314
+ return lexer(**options)
315
+ if rv > best_lexer[0]:
316
+ best_lexer[:] = (rv, lexer)
317
+ if not best_lexer[0] or best_lexer[1] is None:
318
+ raise ClassNotFound('no lexer matching the text found')
319
+ return best_lexer[1](**options)
320
+
321
+
322
+ class _automodule(types.ModuleType):
323
+ """Automatically import lexers."""
324
+
325
+ def __getattr__(self, name):
326
+ info = LEXERS.get(name)
327
+ if info:
328
+ _load_lexers(info[0])
329
+ cls = _lexer_cache[info[1]]
330
+ setattr(self, name, cls)
331
+ return cls
332
+ if name in COMPAT:
333
+ return getattr(self, COMPAT[name])
334
+ raise AttributeError(name)
335
+
336
+
337
+ oldmod = sys.modules[__name__]
338
+ newmod = _automodule(__name__)
339
+ newmod.__dict__.update(oldmod.__dict__)
340
+ sys.modules[__name__] = newmod
341
+ del newmod.newmod, newmod.oldmod, newmod.sys, newmod.types
venv/lib/python3.10/site-packages/pip/_vendor/pygments/lexers/__pycache__/__init__.cpython-310.pyc ADDED
Binary file (9.28 kB). View file
 
venv/lib/python3.10/site-packages/pip/_vendor/pygments/lexers/__pycache__/_mapping.cpython-310.pyc ADDED
Binary file (58.2 kB). View file
 
venv/lib/python3.10/site-packages/pip/_vendor/pygments/lexers/__pycache__/python.cpython-310.pyc ADDED
Binary file (29.5 kB). View file
 
venv/lib/python3.10/site-packages/pip/_vendor/pygments/lexers/_mapping.py ADDED
@@ -0,0 +1,580 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.lexers._mapping
3
+ ~~~~~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Lexer mapping definitions. This file is generated by itself. Everytime
6
+ you change something on a builtin lexer definition, run this script from
7
+ the lexers folder to update it.
8
+
9
+ Do not alter the LEXERS dictionary by hand.
10
+
11
+ :copyright: Copyright 2006-2014, 2016 by the Pygments team, see AUTHORS.
12
+ :license: BSD, see LICENSE for details.
13
+ """
14
+
15
+ LEXERS = {
16
+ 'ABAPLexer': ('pip._vendor.pygments.lexers.business', 'ABAP', ('abap',), ('*.abap', '*.ABAP'), ('text/x-abap',)),
17
+ 'AMDGPULexer': ('pip._vendor.pygments.lexers.amdgpu', 'AMDGPU', ('amdgpu',), ('*.isa',), ()),
18
+ 'APLLexer': ('pip._vendor.pygments.lexers.apl', 'APL', ('apl',), ('*.apl', '*.aplf', '*.aplo', '*.apln', '*.aplc', '*.apli', '*.dyalog'), ()),
19
+ 'AbnfLexer': ('pip._vendor.pygments.lexers.grammar_notation', 'ABNF', ('abnf',), ('*.abnf',), ('text/x-abnf',)),
20
+ 'ActionScript3Lexer': ('pip._vendor.pygments.lexers.actionscript', 'ActionScript 3', ('actionscript3', 'as3'), ('*.as',), ('application/x-actionscript3', 'text/x-actionscript3', 'text/actionscript3')),
21
+ 'ActionScriptLexer': ('pip._vendor.pygments.lexers.actionscript', 'ActionScript', ('actionscript', 'as'), ('*.as',), ('application/x-actionscript', 'text/x-actionscript', 'text/actionscript')),
22
+ 'AdaLexer': ('pip._vendor.pygments.lexers.pascal', 'Ada', ('ada', 'ada95', 'ada2005'), ('*.adb', '*.ads', '*.ada'), ('text/x-ada',)),
23
+ 'AdlLexer': ('pip._vendor.pygments.lexers.archetype', 'ADL', ('adl',), ('*.adl', '*.adls', '*.adlf', '*.adlx'), ()),
24
+ 'AgdaLexer': ('pip._vendor.pygments.lexers.haskell', 'Agda', ('agda',), ('*.agda',), ('text/x-agda',)),
25
+ 'AheuiLexer': ('pip._vendor.pygments.lexers.esoteric', 'Aheui', ('aheui',), ('*.aheui',), ()),
26
+ 'AlloyLexer': ('pip._vendor.pygments.lexers.dsls', 'Alloy', ('alloy',), ('*.als',), ('text/x-alloy',)),
27
+ 'AmbientTalkLexer': ('pip._vendor.pygments.lexers.ambient', 'AmbientTalk', ('ambienttalk', 'ambienttalk/2', 'at'), ('*.at',), ('text/x-ambienttalk',)),
28
+ 'AmplLexer': ('pip._vendor.pygments.lexers.ampl', 'Ampl', ('ampl',), ('*.run',), ()),
29
+ 'Angular2HtmlLexer': ('pip._vendor.pygments.lexers.templates', 'HTML + Angular2', ('html+ng2',), ('*.ng2',), ()),
30
+ 'Angular2Lexer': ('pip._vendor.pygments.lexers.templates', 'Angular2', ('ng2',), (), ()),
31
+ 'AntlrActionScriptLexer': ('pip._vendor.pygments.lexers.parsers', 'ANTLR With ActionScript Target', ('antlr-actionscript', 'antlr-as'), ('*.G', '*.g'), ()),
32
+ 'AntlrCSharpLexer': ('pip._vendor.pygments.lexers.parsers', 'ANTLR With C# Target', ('antlr-csharp', 'antlr-c#'), ('*.G', '*.g'), ()),
33
+ 'AntlrCppLexer': ('pip._vendor.pygments.lexers.parsers', 'ANTLR With CPP Target', ('antlr-cpp',), ('*.G', '*.g'), ()),
34
+ 'AntlrJavaLexer': ('pip._vendor.pygments.lexers.parsers', 'ANTLR With Java Target', ('antlr-java',), ('*.G', '*.g'), ()),
35
+ 'AntlrLexer': ('pip._vendor.pygments.lexers.parsers', 'ANTLR', ('antlr',), (), ()),
36
+ 'AntlrObjectiveCLexer': ('pip._vendor.pygments.lexers.parsers', 'ANTLR With ObjectiveC Target', ('antlr-objc',), ('*.G', '*.g'), ()),
37
+ 'AntlrPerlLexer': ('pip._vendor.pygments.lexers.parsers', 'ANTLR With Perl Target', ('antlr-perl',), ('*.G', '*.g'), ()),
38
+ 'AntlrPythonLexer': ('pip._vendor.pygments.lexers.parsers', 'ANTLR With Python Target', ('antlr-python',), ('*.G', '*.g'), ()),
39
+ 'AntlrRubyLexer': ('pip._vendor.pygments.lexers.parsers', 'ANTLR With Ruby Target', ('antlr-ruby', 'antlr-rb'), ('*.G', '*.g'), ()),
40
+ 'ApacheConfLexer': ('pip._vendor.pygments.lexers.configs', 'ApacheConf', ('apacheconf', 'aconf', 'apache'), ('.htaccess', 'apache.conf', 'apache2.conf'), ('text/x-apacheconf',)),
41
+ 'AppleScriptLexer': ('pip._vendor.pygments.lexers.scripting', 'AppleScript', ('applescript',), ('*.applescript',), ()),
42
+ 'ArduinoLexer': ('pip._vendor.pygments.lexers.c_like', 'Arduino', ('arduino',), ('*.ino',), ('text/x-arduino',)),
43
+ 'ArrowLexer': ('pip._vendor.pygments.lexers.arrow', 'Arrow', ('arrow',), ('*.arw',), ()),
44
+ 'AscLexer': ('pip._vendor.pygments.lexers.asc', 'ASCII armored', ('asc', 'pem'), ('*.asc', '*.pem', 'id_dsa', 'id_ecdsa', 'id_ecdsa_sk', 'id_ed25519', 'id_ed25519_sk', 'id_rsa'), ('application/pgp-keys', 'application/pgp-encrypted', 'application/pgp-signature')),
45
+ 'AspectJLexer': ('pip._vendor.pygments.lexers.jvm', 'AspectJ', ('aspectj',), ('*.aj',), ('text/x-aspectj',)),
46
+ 'AsymptoteLexer': ('pip._vendor.pygments.lexers.graphics', 'Asymptote', ('asymptote', 'asy'), ('*.asy',), ('text/x-asymptote',)),
47
+ 'AugeasLexer': ('pip._vendor.pygments.lexers.configs', 'Augeas', ('augeas',), ('*.aug',), ()),
48
+ 'AutoItLexer': ('pip._vendor.pygments.lexers.automation', 'AutoIt', ('autoit',), ('*.au3',), ('text/x-autoit',)),
49
+ 'AutohotkeyLexer': ('pip._vendor.pygments.lexers.automation', 'autohotkey', ('autohotkey', 'ahk'), ('*.ahk', '*.ahkl'), ('text/x-autohotkey',)),
50
+ 'AwkLexer': ('pip._vendor.pygments.lexers.textedit', 'Awk', ('awk', 'gawk', 'mawk', 'nawk'), ('*.awk',), ('application/x-awk',)),
51
+ 'BBCBasicLexer': ('pip._vendor.pygments.lexers.basic', 'BBC Basic', ('bbcbasic',), ('*.bbc',), ()),
52
+ 'BBCodeLexer': ('pip._vendor.pygments.lexers.markup', 'BBCode', ('bbcode',), (), ('text/x-bbcode',)),
53
+ 'BCLexer': ('pip._vendor.pygments.lexers.algebra', 'BC', ('bc',), ('*.bc',), ()),
54
+ 'BSTLexer': ('pip._vendor.pygments.lexers.bibtex', 'BST', ('bst', 'bst-pybtex'), ('*.bst',), ()),
55
+ 'BareLexer': ('pip._vendor.pygments.lexers.bare', 'BARE', ('bare',), ('*.bare',), ()),
56
+ 'BaseMakefileLexer': ('pip._vendor.pygments.lexers.make', 'Base Makefile', ('basemake',), (), ()),
57
+ 'BashLexer': ('pip._vendor.pygments.lexers.shell', 'Bash', ('bash', 'sh', 'ksh', 'zsh', 'shell'), ('*.sh', '*.ksh', '*.bash', '*.ebuild', '*.eclass', '*.exheres-0', '*.exlib', '*.zsh', '.bashrc', 'bashrc', '.bash_*', 'bash_*', 'zshrc', '.zshrc', '.kshrc', 'kshrc', 'PKGBUILD'), ('application/x-sh', 'application/x-shellscript', 'text/x-shellscript')),
58
+ 'BashSessionLexer': ('pip._vendor.pygments.lexers.shell', 'Bash Session', ('console', 'shell-session'), ('*.sh-session', '*.shell-session'), ('application/x-shell-session', 'application/x-sh-session')),
59
+ 'BatchLexer': ('pip._vendor.pygments.lexers.shell', 'Batchfile', ('batch', 'bat', 'dosbatch', 'winbatch'), ('*.bat', '*.cmd'), ('application/x-dos-batch',)),
60
+ 'BddLexer': ('pip._vendor.pygments.lexers.bdd', 'Bdd', ('bdd',), ('*.feature',), ('text/x-bdd',)),
61
+ 'BefungeLexer': ('pip._vendor.pygments.lexers.esoteric', 'Befunge', ('befunge',), ('*.befunge',), ('application/x-befunge',)),
62
+ 'BibTeXLexer': ('pip._vendor.pygments.lexers.bibtex', 'BibTeX', ('bibtex', 'bib'), ('*.bib',), ('text/x-bibtex',)),
63
+ 'BlitzBasicLexer': ('pip._vendor.pygments.lexers.basic', 'BlitzBasic', ('blitzbasic', 'b3d', 'bplus'), ('*.bb', '*.decls'), ('text/x-bb',)),
64
+ 'BlitzMaxLexer': ('pip._vendor.pygments.lexers.basic', 'BlitzMax', ('blitzmax', 'bmax'), ('*.bmx',), ('text/x-bmx',)),
65
+ 'BnfLexer': ('pip._vendor.pygments.lexers.grammar_notation', 'BNF', ('bnf',), ('*.bnf',), ('text/x-bnf',)),
66
+ 'BoaLexer': ('pip._vendor.pygments.lexers.boa', 'Boa', ('boa',), ('*.boa',), ()),
67
+ 'BooLexer': ('pip._vendor.pygments.lexers.dotnet', 'Boo', ('boo',), ('*.boo',), ('text/x-boo',)),
68
+ 'BoogieLexer': ('pip._vendor.pygments.lexers.verification', 'Boogie', ('boogie',), ('*.bpl',), ()),
69
+ 'BrainfuckLexer': ('pip._vendor.pygments.lexers.esoteric', 'Brainfuck', ('brainfuck', 'bf'), ('*.bf', '*.b'), ('application/x-brainfuck',)),
70
+ 'BugsLexer': ('pip._vendor.pygments.lexers.modeling', 'BUGS', ('bugs', 'winbugs', 'openbugs'), ('*.bug',), ()),
71
+ 'CAmkESLexer': ('pip._vendor.pygments.lexers.esoteric', 'CAmkES', ('camkes', 'idl4'), ('*.camkes', '*.idl4'), ()),
72
+ 'CLexer': ('pip._vendor.pygments.lexers.c_cpp', 'C', ('c',), ('*.c', '*.h', '*.idc', '*.x[bp]m'), ('text/x-chdr', 'text/x-csrc', 'image/x-xbitmap', 'image/x-xpixmap')),
73
+ 'CMakeLexer': ('pip._vendor.pygments.lexers.make', 'CMake', ('cmake',), ('*.cmake', 'CMakeLists.txt'), ('text/x-cmake',)),
74
+ 'CObjdumpLexer': ('pip._vendor.pygments.lexers.asm', 'c-objdump', ('c-objdump',), ('*.c-objdump',), ('text/x-c-objdump',)),
75
+ 'CPSALexer': ('pip._vendor.pygments.lexers.lisp', 'CPSA', ('cpsa',), ('*.cpsa',), ()),
76
+ 'CSharpAspxLexer': ('pip._vendor.pygments.lexers.dotnet', 'aspx-cs', ('aspx-cs',), ('*.aspx', '*.asax', '*.ascx', '*.ashx', '*.asmx', '*.axd'), ()),
77
+ 'CSharpLexer': ('pip._vendor.pygments.lexers.dotnet', 'C#', ('csharp', 'c#', 'cs'), ('*.cs',), ('text/x-csharp',)),
78
+ 'Ca65Lexer': ('pip._vendor.pygments.lexers.asm', 'ca65 assembler', ('ca65',), ('*.s',), ()),
79
+ 'CadlLexer': ('pip._vendor.pygments.lexers.archetype', 'cADL', ('cadl',), ('*.cadl',), ()),
80
+ 'CapDLLexer': ('pip._vendor.pygments.lexers.esoteric', 'CapDL', ('capdl',), ('*.cdl',), ()),
81
+ 'CapnProtoLexer': ('pip._vendor.pygments.lexers.capnproto', "Cap'n Proto", ('capnp',), ('*.capnp',), ()),
82
+ 'CbmBasicV2Lexer': ('pip._vendor.pygments.lexers.basic', 'CBM BASIC V2', ('cbmbas',), ('*.bas',), ()),
83
+ 'CddlLexer': ('pip._vendor.pygments.lexers.cddl', 'CDDL', ('cddl',), ('*.cddl',), ('text/x-cddl',)),
84
+ 'CeylonLexer': ('pip._vendor.pygments.lexers.jvm', 'Ceylon', ('ceylon',), ('*.ceylon',), ('text/x-ceylon',)),
85
+ 'Cfengine3Lexer': ('pip._vendor.pygments.lexers.configs', 'CFEngine3', ('cfengine3', 'cf3'), ('*.cf',), ()),
86
+ 'ChaiscriptLexer': ('pip._vendor.pygments.lexers.scripting', 'ChaiScript', ('chaiscript', 'chai'), ('*.chai',), ('text/x-chaiscript', 'application/x-chaiscript')),
87
+ 'ChapelLexer': ('pip._vendor.pygments.lexers.chapel', 'Chapel', ('chapel', 'chpl'), ('*.chpl',), ()),
88
+ 'CharmciLexer': ('pip._vendor.pygments.lexers.c_like', 'Charmci', ('charmci',), ('*.ci',), ()),
89
+ 'CheetahHtmlLexer': ('pip._vendor.pygments.lexers.templates', 'HTML+Cheetah', ('html+cheetah', 'html+spitfire', 'htmlcheetah'), (), ('text/html+cheetah', 'text/html+spitfire')),
90
+ 'CheetahJavascriptLexer': ('pip._vendor.pygments.lexers.templates', 'JavaScript+Cheetah', ('javascript+cheetah', 'js+cheetah', 'javascript+spitfire', 'js+spitfire'), (), ('application/x-javascript+cheetah', 'text/x-javascript+cheetah', 'text/javascript+cheetah', 'application/x-javascript+spitfire', 'text/x-javascript+spitfire', 'text/javascript+spitfire')),
91
+ 'CheetahLexer': ('pip._vendor.pygments.lexers.templates', 'Cheetah', ('cheetah', 'spitfire'), ('*.tmpl', '*.spt'), ('application/x-cheetah', 'application/x-spitfire')),
92
+ 'CheetahXmlLexer': ('pip._vendor.pygments.lexers.templates', 'XML+Cheetah', ('xml+cheetah', 'xml+spitfire'), (), ('application/xml+cheetah', 'application/xml+spitfire')),
93
+ 'CirruLexer': ('pip._vendor.pygments.lexers.webmisc', 'Cirru', ('cirru',), ('*.cirru',), ('text/x-cirru',)),
94
+ 'ClayLexer': ('pip._vendor.pygments.lexers.c_like', 'Clay', ('clay',), ('*.clay',), ('text/x-clay',)),
95
+ 'CleanLexer': ('pip._vendor.pygments.lexers.clean', 'Clean', ('clean',), ('*.icl', '*.dcl'), ()),
96
+ 'ClojureLexer': ('pip._vendor.pygments.lexers.jvm', 'Clojure', ('clojure', 'clj'), ('*.clj',), ('text/x-clojure', 'application/x-clojure')),
97
+ 'ClojureScriptLexer': ('pip._vendor.pygments.lexers.jvm', 'ClojureScript', ('clojurescript', 'cljs'), ('*.cljs',), ('text/x-clojurescript', 'application/x-clojurescript')),
98
+ 'CobolFreeformatLexer': ('pip._vendor.pygments.lexers.business', 'COBOLFree', ('cobolfree',), ('*.cbl', '*.CBL'), ()),
99
+ 'CobolLexer': ('pip._vendor.pygments.lexers.business', 'COBOL', ('cobol',), ('*.cob', '*.COB', '*.cpy', '*.CPY'), ('text/x-cobol',)),
100
+ 'CoffeeScriptLexer': ('pip._vendor.pygments.lexers.javascript', 'CoffeeScript', ('coffeescript', 'coffee-script', 'coffee'), ('*.coffee',), ('text/coffeescript',)),
101
+ 'ColdfusionCFCLexer': ('pip._vendor.pygments.lexers.templates', 'Coldfusion CFC', ('cfc',), ('*.cfc',), ()),
102
+ 'ColdfusionHtmlLexer': ('pip._vendor.pygments.lexers.templates', 'Coldfusion HTML', ('cfm',), ('*.cfm', '*.cfml'), ('application/x-coldfusion',)),
103
+ 'ColdfusionLexer': ('pip._vendor.pygments.lexers.templates', 'cfstatement', ('cfs',), (), ()),
104
+ 'CommonLispLexer': ('pip._vendor.pygments.lexers.lisp', 'Common Lisp', ('common-lisp', 'cl', 'lisp'), ('*.cl', '*.lisp'), ('text/x-common-lisp',)),
105
+ 'ComponentPascalLexer': ('pip._vendor.pygments.lexers.oberon', 'Component Pascal', ('componentpascal', 'cp'), ('*.cp', '*.cps'), ('text/x-component-pascal',)),
106
+ 'CoqLexer': ('pip._vendor.pygments.lexers.theorem', 'Coq', ('coq',), ('*.v',), ('text/x-coq',)),
107
+ 'CppLexer': ('pip._vendor.pygments.lexers.c_cpp', 'C++', ('cpp', 'c++'), ('*.cpp', '*.hpp', '*.c++', '*.h++', '*.cc', '*.hh', '*.cxx', '*.hxx', '*.C', '*.H', '*.cp', '*.CPP'), ('text/x-c++hdr', 'text/x-c++src')),
108
+ 'CppObjdumpLexer': ('pip._vendor.pygments.lexers.asm', 'cpp-objdump', ('cpp-objdump', 'c++-objdumb', 'cxx-objdump'), ('*.cpp-objdump', '*.c++-objdump', '*.cxx-objdump'), ('text/x-cpp-objdump',)),
109
+ 'CrmshLexer': ('pip._vendor.pygments.lexers.dsls', 'Crmsh', ('crmsh', 'pcmk'), ('*.crmsh', '*.pcmk'), ()),
110
+ 'CrocLexer': ('pip._vendor.pygments.lexers.d', 'Croc', ('croc',), ('*.croc',), ('text/x-crocsrc',)),
111
+ 'CryptolLexer': ('pip._vendor.pygments.lexers.haskell', 'Cryptol', ('cryptol', 'cry'), ('*.cry',), ('text/x-cryptol',)),
112
+ 'CrystalLexer': ('pip._vendor.pygments.lexers.crystal', 'Crystal', ('cr', 'crystal'), ('*.cr',), ('text/x-crystal',)),
113
+ 'CsoundDocumentLexer': ('pip._vendor.pygments.lexers.csound', 'Csound Document', ('csound-document', 'csound-csd'), ('*.csd',), ()),
114
+ 'CsoundOrchestraLexer': ('pip._vendor.pygments.lexers.csound', 'Csound Orchestra', ('csound', 'csound-orc'), ('*.orc', '*.udo'), ()),
115
+ 'CsoundScoreLexer': ('pip._vendor.pygments.lexers.csound', 'Csound Score', ('csound-score', 'csound-sco'), ('*.sco',), ()),
116
+ 'CssDjangoLexer': ('pip._vendor.pygments.lexers.templates', 'CSS+Django/Jinja', ('css+django', 'css+jinja'), (), ('text/css+django', 'text/css+jinja')),
117
+ 'CssErbLexer': ('pip._vendor.pygments.lexers.templates', 'CSS+Ruby', ('css+ruby', 'css+erb'), (), ('text/css+ruby',)),
118
+ 'CssGenshiLexer': ('pip._vendor.pygments.lexers.templates', 'CSS+Genshi Text', ('css+genshitext', 'css+genshi'), (), ('text/css+genshi',)),
119
+ 'CssLexer': ('pip._vendor.pygments.lexers.css', 'CSS', ('css',), ('*.css',), ('text/css',)),
120
+ 'CssPhpLexer': ('pip._vendor.pygments.lexers.templates', 'CSS+PHP', ('css+php',), (), ('text/css+php',)),
121
+ 'CssSmartyLexer': ('pip._vendor.pygments.lexers.templates', 'CSS+Smarty', ('css+smarty',), (), ('text/css+smarty',)),
122
+ 'CudaLexer': ('pip._vendor.pygments.lexers.c_like', 'CUDA', ('cuda', 'cu'), ('*.cu', '*.cuh'), ('text/x-cuda',)),
123
+ 'CypherLexer': ('pip._vendor.pygments.lexers.graph', 'Cypher', ('cypher',), ('*.cyp', '*.cypher'), ()),
124
+ 'CythonLexer': ('pip._vendor.pygments.lexers.python', 'Cython', ('cython', 'pyx', 'pyrex'), ('*.pyx', '*.pxd', '*.pxi'), ('text/x-cython', 'application/x-cython')),
125
+ 'DLexer': ('pip._vendor.pygments.lexers.d', 'D', ('d',), ('*.d', '*.di'), ('text/x-dsrc',)),
126
+ 'DObjdumpLexer': ('pip._vendor.pygments.lexers.asm', 'd-objdump', ('d-objdump',), ('*.d-objdump',), ('text/x-d-objdump',)),
127
+ 'DarcsPatchLexer': ('pip._vendor.pygments.lexers.diff', 'Darcs Patch', ('dpatch',), ('*.dpatch', '*.darcspatch'), ()),
128
+ 'DartLexer': ('pip._vendor.pygments.lexers.javascript', 'Dart', ('dart',), ('*.dart',), ('text/x-dart',)),
129
+ 'Dasm16Lexer': ('pip._vendor.pygments.lexers.asm', 'DASM16', ('dasm16',), ('*.dasm16', '*.dasm'), ('text/x-dasm16',)),
130
+ 'DebianControlLexer': ('pip._vendor.pygments.lexers.installers', 'Debian Control file', ('debcontrol', 'control'), ('control',), ()),
131
+ 'DelphiLexer': ('pip._vendor.pygments.lexers.pascal', 'Delphi', ('delphi', 'pas', 'pascal', 'objectpascal'), ('*.pas', '*.dpr'), ('text/x-pascal',)),
132
+ 'DevicetreeLexer': ('pip._vendor.pygments.lexers.devicetree', 'Devicetree', ('devicetree', 'dts'), ('*.dts', '*.dtsi'), ('text/x-c',)),
133
+ 'DgLexer': ('pip._vendor.pygments.lexers.python', 'dg', ('dg',), ('*.dg',), ('text/x-dg',)),
134
+ 'DiffLexer': ('pip._vendor.pygments.lexers.diff', 'Diff', ('diff', 'udiff'), ('*.diff', '*.patch'), ('text/x-diff', 'text/x-patch')),
135
+ 'DjangoLexer': ('pip._vendor.pygments.lexers.templates', 'Django/Jinja', ('django', 'jinja'), (), ('application/x-django-templating', 'application/x-jinja')),
136
+ 'DockerLexer': ('pip._vendor.pygments.lexers.configs', 'Docker', ('docker', 'dockerfile'), ('Dockerfile', '*.docker'), ('text/x-dockerfile-config',)),
137
+ 'DtdLexer': ('pip._vendor.pygments.lexers.html', 'DTD', ('dtd',), ('*.dtd',), ('application/xml-dtd',)),
138
+ 'DuelLexer': ('pip._vendor.pygments.lexers.webmisc', 'Duel', ('duel', 'jbst', 'jsonml+bst'), ('*.duel', '*.jbst'), ('text/x-duel', 'text/x-jbst')),
139
+ 'DylanConsoleLexer': ('pip._vendor.pygments.lexers.dylan', 'Dylan session', ('dylan-console', 'dylan-repl'), ('*.dylan-console',), ('text/x-dylan-console',)),
140
+ 'DylanLexer': ('pip._vendor.pygments.lexers.dylan', 'Dylan', ('dylan',), ('*.dylan', '*.dyl', '*.intr'), ('text/x-dylan',)),
141
+ 'DylanLidLexer': ('pip._vendor.pygments.lexers.dylan', 'DylanLID', ('dylan-lid', 'lid'), ('*.lid', '*.hdp'), ('text/x-dylan-lid',)),
142
+ 'ECLLexer': ('pip._vendor.pygments.lexers.ecl', 'ECL', ('ecl',), ('*.ecl',), ('application/x-ecl',)),
143
+ 'ECLexer': ('pip._vendor.pygments.lexers.c_like', 'eC', ('ec',), ('*.ec', '*.eh'), ('text/x-echdr', 'text/x-ecsrc')),
144
+ 'EarlGreyLexer': ('pip._vendor.pygments.lexers.javascript', 'Earl Grey', ('earl-grey', 'earlgrey', 'eg'), ('*.eg',), ('text/x-earl-grey',)),
145
+ 'EasytrieveLexer': ('pip._vendor.pygments.lexers.scripting', 'Easytrieve', ('easytrieve',), ('*.ezt', '*.mac'), ('text/x-easytrieve',)),
146
+ 'EbnfLexer': ('pip._vendor.pygments.lexers.parsers', 'EBNF', ('ebnf',), ('*.ebnf',), ('text/x-ebnf',)),
147
+ 'EiffelLexer': ('pip._vendor.pygments.lexers.eiffel', 'Eiffel', ('eiffel',), ('*.e',), ('text/x-eiffel',)),
148
+ 'ElixirConsoleLexer': ('pip._vendor.pygments.lexers.erlang', 'Elixir iex session', ('iex',), (), ('text/x-elixir-shellsession',)),
149
+ 'ElixirLexer': ('pip._vendor.pygments.lexers.erlang', 'Elixir', ('elixir', 'ex', 'exs'), ('*.ex', '*.eex', '*.exs', '*.leex'), ('text/x-elixir',)),
150
+ 'ElmLexer': ('pip._vendor.pygments.lexers.elm', 'Elm', ('elm',), ('*.elm',), ('text/x-elm',)),
151
+ 'ElpiLexer': ('pip._vendor.pygments.lexers.elpi', 'Elpi', ('elpi',), ('*.elpi',), ('text/x-elpi',)),
152
+ 'EmacsLispLexer': ('pip._vendor.pygments.lexers.lisp', 'EmacsLisp', ('emacs-lisp', 'elisp', 'emacs'), ('*.el',), ('text/x-elisp', 'application/x-elisp')),
153
+ 'EmailLexer': ('pip._vendor.pygments.lexers.email', 'E-mail', ('email', 'eml'), ('*.eml',), ('message/rfc822',)),
154
+ 'ErbLexer': ('pip._vendor.pygments.lexers.templates', 'ERB', ('erb',), (), ('application/x-ruby-templating',)),
155
+ 'ErlangLexer': ('pip._vendor.pygments.lexers.erlang', 'Erlang', ('erlang',), ('*.erl', '*.hrl', '*.es', '*.escript'), ('text/x-erlang',)),
156
+ 'ErlangShellLexer': ('pip._vendor.pygments.lexers.erlang', 'Erlang erl session', ('erl',), ('*.erl-sh',), ('text/x-erl-shellsession',)),
157
+ 'EvoqueHtmlLexer': ('pip._vendor.pygments.lexers.templates', 'HTML+Evoque', ('html+evoque',), ('*.html',), ('text/html+evoque',)),
158
+ 'EvoqueLexer': ('pip._vendor.pygments.lexers.templates', 'Evoque', ('evoque',), ('*.evoque',), ('application/x-evoque',)),
159
+ 'EvoqueXmlLexer': ('pip._vendor.pygments.lexers.templates', 'XML+Evoque', ('xml+evoque',), ('*.xml',), ('application/xml+evoque',)),
160
+ 'ExeclineLexer': ('pip._vendor.pygments.lexers.shell', 'execline', ('execline',), ('*.exec',), ()),
161
+ 'EzhilLexer': ('pip._vendor.pygments.lexers.ezhil', 'Ezhil', ('ezhil',), ('*.n',), ('text/x-ezhil',)),
162
+ 'FSharpLexer': ('pip._vendor.pygments.lexers.dotnet', 'F#', ('fsharp', 'f#'), ('*.fs', '*.fsi'), ('text/x-fsharp',)),
163
+ 'FStarLexer': ('pip._vendor.pygments.lexers.ml', 'FStar', ('fstar',), ('*.fst', '*.fsti'), ('text/x-fstar',)),
164
+ 'FactorLexer': ('pip._vendor.pygments.lexers.factor', 'Factor', ('factor',), ('*.factor',), ('text/x-factor',)),
165
+ 'FancyLexer': ('pip._vendor.pygments.lexers.ruby', 'Fancy', ('fancy', 'fy'), ('*.fy', '*.fancypack'), ('text/x-fancysrc',)),
166
+ 'FantomLexer': ('pip._vendor.pygments.lexers.fantom', 'Fantom', ('fan',), ('*.fan',), ('application/x-fantom',)),
167
+ 'FelixLexer': ('pip._vendor.pygments.lexers.felix', 'Felix', ('felix', 'flx'), ('*.flx', '*.flxh'), ('text/x-felix',)),
168
+ 'FennelLexer': ('pip._vendor.pygments.lexers.lisp', 'Fennel', ('fennel', 'fnl'), ('*.fnl',), ()),
169
+ 'FishShellLexer': ('pip._vendor.pygments.lexers.shell', 'Fish', ('fish', 'fishshell'), ('*.fish', '*.load'), ('application/x-fish',)),
170
+ 'FlatlineLexer': ('pip._vendor.pygments.lexers.dsls', 'Flatline', ('flatline',), (), ('text/x-flatline',)),
171
+ 'FloScriptLexer': ('pip._vendor.pygments.lexers.floscript', 'FloScript', ('floscript', 'flo'), ('*.flo',), ()),
172
+ 'ForthLexer': ('pip._vendor.pygments.lexers.forth', 'Forth', ('forth',), ('*.frt', '*.fs'), ('application/x-forth',)),
173
+ 'FortranFixedLexer': ('pip._vendor.pygments.lexers.fortran', 'FortranFixed', ('fortranfixed',), ('*.f', '*.F'), ()),
174
+ 'FortranLexer': ('pip._vendor.pygments.lexers.fortran', 'Fortran', ('fortran', 'f90'), ('*.f03', '*.f90', '*.F03', '*.F90'), ('text/x-fortran',)),
175
+ 'FoxProLexer': ('pip._vendor.pygments.lexers.foxpro', 'FoxPro', ('foxpro', 'vfp', 'clipper', 'xbase'), ('*.PRG', '*.prg'), ()),
176
+ 'FreeFemLexer': ('pip._vendor.pygments.lexers.freefem', 'Freefem', ('freefem',), ('*.edp',), ('text/x-freefem',)),
177
+ 'FutharkLexer': ('pip._vendor.pygments.lexers.futhark', 'Futhark', ('futhark',), ('*.fut',), ('text/x-futhark',)),
178
+ 'GAPLexer': ('pip._vendor.pygments.lexers.algebra', 'GAP', ('gap',), ('*.g', '*.gd', '*.gi', '*.gap'), ()),
179
+ 'GDScriptLexer': ('pip._vendor.pygments.lexers.gdscript', 'GDScript', ('gdscript', 'gd'), ('*.gd',), ('text/x-gdscript', 'application/x-gdscript')),
180
+ 'GLShaderLexer': ('pip._vendor.pygments.lexers.graphics', 'GLSL', ('glsl',), ('*.vert', '*.frag', '*.geo'), ('text/x-glslsrc',)),
181
+ 'GSQLLexer': ('pip._vendor.pygments.lexers.gsql', 'GSQL', ('gsql',), ('*.gsql',), ()),
182
+ 'GasLexer': ('pip._vendor.pygments.lexers.asm', 'GAS', ('gas', 'asm'), ('*.s', '*.S'), ('text/x-gas',)),
183
+ 'GcodeLexer': ('pip._vendor.pygments.lexers.gcodelexer', 'g-code', ('gcode',), ('*.gcode',), ()),
184
+ 'GenshiLexer': ('pip._vendor.pygments.lexers.templates', 'Genshi', ('genshi', 'kid', 'xml+genshi', 'xml+kid'), ('*.kid',), ('application/x-genshi', 'application/x-kid')),
185
+ 'GenshiTextLexer': ('pip._vendor.pygments.lexers.templates', 'Genshi Text', ('genshitext',), (), ('application/x-genshi-text', 'text/x-genshi')),
186
+ 'GettextLexer': ('pip._vendor.pygments.lexers.textfmts', 'Gettext Catalog', ('pot', 'po'), ('*.pot', '*.po'), ('application/x-gettext', 'text/x-gettext', 'text/gettext')),
187
+ 'GherkinLexer': ('pip._vendor.pygments.lexers.testing', 'Gherkin', ('gherkin', 'cucumber'), ('*.feature',), ('text/x-gherkin',)),
188
+ 'GnuplotLexer': ('pip._vendor.pygments.lexers.graphics', 'Gnuplot', ('gnuplot',), ('*.plot', '*.plt'), ('text/x-gnuplot',)),
189
+ 'GoLexer': ('pip._vendor.pygments.lexers.go', 'Go', ('go', 'golang'), ('*.go',), ('text/x-gosrc',)),
190
+ 'GoloLexer': ('pip._vendor.pygments.lexers.jvm', 'Golo', ('golo',), ('*.golo',), ()),
191
+ 'GoodDataCLLexer': ('pip._vendor.pygments.lexers.business', 'GoodData-CL', ('gooddata-cl',), ('*.gdc',), ('text/x-gooddata-cl',)),
192
+ 'GosuLexer': ('pip._vendor.pygments.lexers.jvm', 'Gosu', ('gosu',), ('*.gs', '*.gsx', '*.gsp', '*.vark'), ('text/x-gosu',)),
193
+ 'GosuTemplateLexer': ('pip._vendor.pygments.lexers.jvm', 'Gosu Template', ('gst',), ('*.gst',), ('text/x-gosu-template',)),
194
+ 'GraphvizLexer': ('pip._vendor.pygments.lexers.graphviz', 'Graphviz', ('graphviz', 'dot'), ('*.gv', '*.dot'), ('text/x-graphviz', 'text/vnd.graphviz')),
195
+ 'GroffLexer': ('pip._vendor.pygments.lexers.markup', 'Groff', ('groff', 'nroff', 'man'), ('*.[1-9]', '*.man', '*.1p', '*.3pm'), ('application/x-troff', 'text/troff')),
196
+ 'GroovyLexer': ('pip._vendor.pygments.lexers.jvm', 'Groovy', ('groovy',), ('*.groovy', '*.gradle'), ('text/x-groovy',)),
197
+ 'HLSLShaderLexer': ('pip._vendor.pygments.lexers.graphics', 'HLSL', ('hlsl',), ('*.hlsl', '*.hlsli'), ('text/x-hlsl',)),
198
+ 'HamlLexer': ('pip._vendor.pygments.lexers.html', 'Haml', ('haml',), ('*.haml',), ('text/x-haml',)),
199
+ 'HandlebarsHtmlLexer': ('pip._vendor.pygments.lexers.templates', 'HTML+Handlebars', ('html+handlebars',), ('*.handlebars', '*.hbs'), ('text/html+handlebars', 'text/x-handlebars-template')),
200
+ 'HandlebarsLexer': ('pip._vendor.pygments.lexers.templates', 'Handlebars', ('handlebars',), (), ()),
201
+ 'HaskellLexer': ('pip._vendor.pygments.lexers.haskell', 'Haskell', ('haskell', 'hs'), ('*.hs',), ('text/x-haskell',)),
202
+ 'HaxeLexer': ('pip._vendor.pygments.lexers.haxe', 'Haxe', ('haxe', 'hxsl', 'hx'), ('*.hx', '*.hxsl'), ('text/haxe', 'text/x-haxe', 'text/x-hx')),
203
+ 'HexdumpLexer': ('pip._vendor.pygments.lexers.hexdump', 'Hexdump', ('hexdump',), (), ()),
204
+ 'HsailLexer': ('pip._vendor.pygments.lexers.asm', 'HSAIL', ('hsail', 'hsa'), ('*.hsail',), ('text/x-hsail',)),
205
+ 'HspecLexer': ('pip._vendor.pygments.lexers.haskell', 'Hspec', ('hspec',), (), ()),
206
+ 'HtmlDjangoLexer': ('pip._vendor.pygments.lexers.templates', 'HTML+Django/Jinja', ('html+django', 'html+jinja', 'htmldjango'), (), ('text/html+django', 'text/html+jinja')),
207
+ 'HtmlGenshiLexer': ('pip._vendor.pygments.lexers.templates', 'HTML+Genshi', ('html+genshi', 'html+kid'), (), ('text/html+genshi',)),
208
+ 'HtmlLexer': ('pip._vendor.pygments.lexers.html', 'HTML', ('html',), ('*.html', '*.htm', '*.xhtml', '*.xslt'), ('text/html', 'application/xhtml+xml')),
209
+ 'HtmlPhpLexer': ('pip._vendor.pygments.lexers.templates', 'HTML+PHP', ('html+php',), ('*.phtml',), ('application/x-php', 'application/x-httpd-php', 'application/x-httpd-php3', 'application/x-httpd-php4', 'application/x-httpd-php5')),
210
+ 'HtmlSmartyLexer': ('pip._vendor.pygments.lexers.templates', 'HTML+Smarty', ('html+smarty',), (), ('text/html+smarty',)),
211
+ 'HttpLexer': ('pip._vendor.pygments.lexers.textfmts', 'HTTP', ('http',), (), ()),
212
+ 'HxmlLexer': ('pip._vendor.pygments.lexers.haxe', 'Hxml', ('haxeml', 'hxml'), ('*.hxml',), ()),
213
+ 'HyLexer': ('pip._vendor.pygments.lexers.lisp', 'Hy', ('hylang',), ('*.hy',), ('text/x-hy', 'application/x-hy')),
214
+ 'HybrisLexer': ('pip._vendor.pygments.lexers.scripting', 'Hybris', ('hybris', 'hy'), ('*.hy', '*.hyb'), ('text/x-hybris', 'application/x-hybris')),
215
+ 'IDLLexer': ('pip._vendor.pygments.lexers.idl', 'IDL', ('idl',), ('*.pro',), ('text/idl',)),
216
+ 'IconLexer': ('pip._vendor.pygments.lexers.unicon', 'Icon', ('icon',), ('*.icon', '*.ICON'), ()),
217
+ 'IdrisLexer': ('pip._vendor.pygments.lexers.haskell', 'Idris', ('idris', 'idr'), ('*.idr',), ('text/x-idris',)),
218
+ 'IgorLexer': ('pip._vendor.pygments.lexers.igor', 'Igor', ('igor', 'igorpro'), ('*.ipf',), ('text/ipf',)),
219
+ 'Inform6Lexer': ('pip._vendor.pygments.lexers.int_fiction', 'Inform 6', ('inform6', 'i6'), ('*.inf',), ()),
220
+ 'Inform6TemplateLexer': ('pip._vendor.pygments.lexers.int_fiction', 'Inform 6 template', ('i6t',), ('*.i6t',), ()),
221
+ 'Inform7Lexer': ('pip._vendor.pygments.lexers.int_fiction', 'Inform 7', ('inform7', 'i7'), ('*.ni', '*.i7x'), ()),
222
+ 'IniLexer': ('pip._vendor.pygments.lexers.configs', 'INI', ('ini', 'cfg', 'dosini'), ('*.ini', '*.cfg', '*.inf', '.editorconfig', '*.service', '*.socket', '*.device', '*.mount', '*.automount', '*.swap', '*.target', '*.path', '*.timer', '*.slice', '*.scope'), ('text/x-ini', 'text/inf')),
223
+ 'IoLexer': ('pip._vendor.pygments.lexers.iolang', 'Io', ('io',), ('*.io',), ('text/x-iosrc',)),
224
+ 'IokeLexer': ('pip._vendor.pygments.lexers.jvm', 'Ioke', ('ioke', 'ik'), ('*.ik',), ('text/x-iokesrc',)),
225
+ 'IrcLogsLexer': ('pip._vendor.pygments.lexers.textfmts', 'IRC logs', ('irc',), ('*.weechatlog',), ('text/x-irclog',)),
226
+ 'IsabelleLexer': ('pip._vendor.pygments.lexers.theorem', 'Isabelle', ('isabelle',), ('*.thy',), ('text/x-isabelle',)),
227
+ 'JLexer': ('pip._vendor.pygments.lexers.j', 'J', ('j',), ('*.ijs',), ('text/x-j',)),
228
+ 'JSLTLexer': ('pip._vendor.pygments.lexers.jslt', 'JSLT', ('jslt',), ('*.jslt',), ('text/x-jslt',)),
229
+ 'JagsLexer': ('pip._vendor.pygments.lexers.modeling', 'JAGS', ('jags',), ('*.jag', '*.bug'), ()),
230
+ 'JasminLexer': ('pip._vendor.pygments.lexers.jvm', 'Jasmin', ('jasmin', 'jasminxt'), ('*.j',), ()),
231
+ 'JavaLexer': ('pip._vendor.pygments.lexers.jvm', 'Java', ('java',), ('*.java',), ('text/x-java',)),
232
+ 'JavascriptDjangoLexer': ('pip._vendor.pygments.lexers.templates', 'JavaScript+Django/Jinja', ('javascript+django', 'js+django', 'javascript+jinja', 'js+jinja'), (), ('application/x-javascript+django', 'application/x-javascript+jinja', 'text/x-javascript+django', 'text/x-javascript+jinja', 'text/javascript+django', 'text/javascript+jinja')),
233
+ 'JavascriptErbLexer': ('pip._vendor.pygments.lexers.templates', 'JavaScript+Ruby', ('javascript+ruby', 'js+ruby', 'javascript+erb', 'js+erb'), (), ('application/x-javascript+ruby', 'text/x-javascript+ruby', 'text/javascript+ruby')),
234
+ 'JavascriptGenshiLexer': ('pip._vendor.pygments.lexers.templates', 'JavaScript+Genshi Text', ('js+genshitext', 'js+genshi', 'javascript+genshitext', 'javascript+genshi'), (), ('application/x-javascript+genshi', 'text/x-javascript+genshi', 'text/javascript+genshi')),
235
+ 'JavascriptLexer': ('pip._vendor.pygments.lexers.javascript', 'JavaScript', ('javascript', 'js'), ('*.js', '*.jsm', '*.mjs', '*.cjs'), ('application/javascript', 'application/x-javascript', 'text/x-javascript', 'text/javascript')),
236
+ 'JavascriptPhpLexer': ('pip._vendor.pygments.lexers.templates', 'JavaScript+PHP', ('javascript+php', 'js+php'), (), ('application/x-javascript+php', 'text/x-javascript+php', 'text/javascript+php')),
237
+ 'JavascriptSmartyLexer': ('pip._vendor.pygments.lexers.templates', 'JavaScript+Smarty', ('javascript+smarty', 'js+smarty'), (), ('application/x-javascript+smarty', 'text/x-javascript+smarty', 'text/javascript+smarty')),
238
+ 'JclLexer': ('pip._vendor.pygments.lexers.scripting', 'JCL', ('jcl',), ('*.jcl',), ('text/x-jcl',)),
239
+ 'JsgfLexer': ('pip._vendor.pygments.lexers.grammar_notation', 'JSGF', ('jsgf',), ('*.jsgf',), ('application/jsgf', 'application/x-jsgf', 'text/jsgf')),
240
+ 'JsonBareObjectLexer': ('pip._vendor.pygments.lexers.data', 'JSONBareObject', (), (), ()),
241
+ 'JsonLdLexer': ('pip._vendor.pygments.lexers.data', 'JSON-LD', ('jsonld', 'json-ld'), ('*.jsonld',), ('application/ld+json',)),
242
+ 'JsonLexer': ('pip._vendor.pygments.lexers.data', 'JSON', ('json', 'json-object'), ('*.json', 'Pipfile.lock'), ('application/json', 'application/json-object')),
243
+ 'JspLexer': ('pip._vendor.pygments.lexers.templates', 'Java Server Page', ('jsp',), ('*.jsp',), ('application/x-jsp',)),
244
+ 'JuliaConsoleLexer': ('pip._vendor.pygments.lexers.julia', 'Julia console', ('jlcon', 'julia-repl'), (), ()),
245
+ 'JuliaLexer': ('pip._vendor.pygments.lexers.julia', 'Julia', ('julia', 'jl'), ('*.jl',), ('text/x-julia', 'application/x-julia')),
246
+ 'JuttleLexer': ('pip._vendor.pygments.lexers.javascript', 'Juttle', ('juttle',), ('*.juttle',), ('application/juttle', 'application/x-juttle', 'text/x-juttle', 'text/juttle')),
247
+ 'KalLexer': ('pip._vendor.pygments.lexers.javascript', 'Kal', ('kal',), ('*.kal',), ('text/kal', 'application/kal')),
248
+ 'KconfigLexer': ('pip._vendor.pygments.lexers.configs', 'Kconfig', ('kconfig', 'menuconfig', 'linux-config', 'kernel-config'), ('Kconfig*', '*Config.in*', 'external.in*', 'standard-modules.in'), ('text/x-kconfig',)),
249
+ 'KernelLogLexer': ('pip._vendor.pygments.lexers.textfmts', 'Kernel log', ('kmsg', 'dmesg'), ('*.kmsg', '*.dmesg'), ()),
250
+ 'KokaLexer': ('pip._vendor.pygments.lexers.haskell', 'Koka', ('koka',), ('*.kk', '*.kki'), ('text/x-koka',)),
251
+ 'KotlinLexer': ('pip._vendor.pygments.lexers.jvm', 'Kotlin', ('kotlin',), ('*.kt', '*.kts'), ('text/x-kotlin',)),
252
+ 'KuinLexer': ('pip._vendor.pygments.lexers.kuin', 'Kuin', ('kuin',), ('*.kn',), ()),
253
+ 'LSLLexer': ('pip._vendor.pygments.lexers.scripting', 'LSL', ('lsl',), ('*.lsl',), ('text/x-lsl',)),
254
+ 'LassoCssLexer': ('pip._vendor.pygments.lexers.templates', 'CSS+Lasso', ('css+lasso',), (), ('text/css+lasso',)),
255
+ 'LassoHtmlLexer': ('pip._vendor.pygments.lexers.templates', 'HTML+Lasso', ('html+lasso',), (), ('text/html+lasso', 'application/x-httpd-lasso', 'application/x-httpd-lasso[89]')),
256
+ 'LassoJavascriptLexer': ('pip._vendor.pygments.lexers.templates', 'JavaScript+Lasso', ('javascript+lasso', 'js+lasso'), (), ('application/x-javascript+lasso', 'text/x-javascript+lasso', 'text/javascript+lasso')),
257
+ 'LassoLexer': ('pip._vendor.pygments.lexers.javascript', 'Lasso', ('lasso', 'lassoscript'), ('*.lasso', '*.lasso[89]'), ('text/x-lasso',)),
258
+ 'LassoXmlLexer': ('pip._vendor.pygments.lexers.templates', 'XML+Lasso', ('xml+lasso',), (), ('application/xml+lasso',)),
259
+ 'LeanLexer': ('pip._vendor.pygments.lexers.theorem', 'Lean', ('lean',), ('*.lean',), ('text/x-lean',)),
260
+ 'LessCssLexer': ('pip._vendor.pygments.lexers.css', 'LessCss', ('less',), ('*.less',), ('text/x-less-css',)),
261
+ 'LighttpdConfLexer': ('pip._vendor.pygments.lexers.configs', 'Lighttpd configuration file', ('lighttpd', 'lighty'), ('lighttpd.conf',), ('text/x-lighttpd-conf',)),
262
+ 'LilyPondLexer': ('pip._vendor.pygments.lexers.lilypond', 'LilyPond', ('lilypond',), ('*.ly',), ()),
263
+ 'LimboLexer': ('pip._vendor.pygments.lexers.inferno', 'Limbo', ('limbo',), ('*.b',), ('text/limbo',)),
264
+ 'LiquidLexer': ('pip._vendor.pygments.lexers.templates', 'liquid', ('liquid',), ('*.liquid',), ()),
265
+ 'LiterateAgdaLexer': ('pip._vendor.pygments.lexers.haskell', 'Literate Agda', ('literate-agda', 'lagda'), ('*.lagda',), ('text/x-literate-agda',)),
266
+ 'LiterateCryptolLexer': ('pip._vendor.pygments.lexers.haskell', 'Literate Cryptol', ('literate-cryptol', 'lcryptol', 'lcry'), ('*.lcry',), ('text/x-literate-cryptol',)),
267
+ 'LiterateHaskellLexer': ('pip._vendor.pygments.lexers.haskell', 'Literate Haskell', ('literate-haskell', 'lhaskell', 'lhs'), ('*.lhs',), ('text/x-literate-haskell',)),
268
+ 'LiterateIdrisLexer': ('pip._vendor.pygments.lexers.haskell', 'Literate Idris', ('literate-idris', 'lidris', 'lidr'), ('*.lidr',), ('text/x-literate-idris',)),
269
+ 'LiveScriptLexer': ('pip._vendor.pygments.lexers.javascript', 'LiveScript', ('livescript', 'live-script'), ('*.ls',), ('text/livescript',)),
270
+ 'LlvmLexer': ('pip._vendor.pygments.lexers.asm', 'LLVM', ('llvm',), ('*.ll',), ('text/x-llvm',)),
271
+ 'LlvmMirBodyLexer': ('pip._vendor.pygments.lexers.asm', 'LLVM-MIR Body', ('llvm-mir-body',), (), ()),
272
+ 'LlvmMirLexer': ('pip._vendor.pygments.lexers.asm', 'LLVM-MIR', ('llvm-mir',), ('*.mir',), ()),
273
+ 'LogosLexer': ('pip._vendor.pygments.lexers.objective', 'Logos', ('logos',), ('*.x', '*.xi', '*.xm', '*.xmi'), ('text/x-logos',)),
274
+ 'LogtalkLexer': ('pip._vendor.pygments.lexers.prolog', 'Logtalk', ('logtalk',), ('*.lgt', '*.logtalk'), ('text/x-logtalk',)),
275
+ 'LuaLexer': ('pip._vendor.pygments.lexers.scripting', 'Lua', ('lua',), ('*.lua', '*.wlua'), ('text/x-lua', 'application/x-lua')),
276
+ 'MIMELexer': ('pip._vendor.pygments.lexers.mime', 'MIME', ('mime',), (), ('multipart/mixed', 'multipart/related', 'multipart/alternative')),
277
+ 'MOOCodeLexer': ('pip._vendor.pygments.lexers.scripting', 'MOOCode', ('moocode', 'moo'), ('*.moo',), ('text/x-moocode',)),
278
+ 'MSDOSSessionLexer': ('pip._vendor.pygments.lexers.shell', 'MSDOS Session', ('doscon',), (), ()),
279
+ 'MakefileLexer': ('pip._vendor.pygments.lexers.make', 'Makefile', ('make', 'makefile', 'mf', 'bsdmake'), ('*.mak', '*.mk', 'Makefile', 'makefile', 'Makefile.*', 'GNUmakefile'), ('text/x-makefile',)),
280
+ 'MakoCssLexer': ('pip._vendor.pygments.lexers.templates', 'CSS+Mako', ('css+mako',), (), ('text/css+mako',)),
281
+ 'MakoHtmlLexer': ('pip._vendor.pygments.lexers.templates', 'HTML+Mako', ('html+mako',), (), ('text/html+mako',)),
282
+ 'MakoJavascriptLexer': ('pip._vendor.pygments.lexers.templates', 'JavaScript+Mako', ('javascript+mako', 'js+mako'), (), ('application/x-javascript+mako', 'text/x-javascript+mako', 'text/javascript+mako')),
283
+ 'MakoLexer': ('pip._vendor.pygments.lexers.templates', 'Mako', ('mako',), ('*.mao',), ('application/x-mako',)),
284
+ 'MakoXmlLexer': ('pip._vendor.pygments.lexers.templates', 'XML+Mako', ('xml+mako',), (), ('application/xml+mako',)),
285
+ 'MaqlLexer': ('pip._vendor.pygments.lexers.business', 'MAQL', ('maql',), ('*.maql',), ('text/x-gooddata-maql', 'application/x-gooddata-maql')),
286
+ 'MarkdownLexer': ('pip._vendor.pygments.lexers.markup', 'Markdown', ('markdown', 'md'), ('*.md', '*.markdown'), ('text/x-markdown',)),
287
+ 'MaskLexer': ('pip._vendor.pygments.lexers.javascript', 'Mask', ('mask',), ('*.mask',), ('text/x-mask',)),
288
+ 'MasonLexer': ('pip._vendor.pygments.lexers.templates', 'Mason', ('mason',), ('*.m', '*.mhtml', '*.mc', '*.mi', 'autohandler', 'dhandler'), ('application/x-mason',)),
289
+ 'MathematicaLexer': ('pip._vendor.pygments.lexers.algebra', 'Mathematica', ('mathematica', 'mma', 'nb'), ('*.nb', '*.cdf', '*.nbp', '*.ma'), ('application/mathematica', 'application/vnd.wolfram.mathematica', 'application/vnd.wolfram.mathematica.package', 'application/vnd.wolfram.cdf')),
290
+ 'MatlabLexer': ('pip._vendor.pygments.lexers.matlab', 'Matlab', ('matlab',), ('*.m',), ('text/matlab',)),
291
+ 'MatlabSessionLexer': ('pip._vendor.pygments.lexers.matlab', 'Matlab session', ('matlabsession',), (), ()),
292
+ 'MaximaLexer': ('pip._vendor.pygments.lexers.maxima', 'Maxima', ('maxima', 'macsyma'), ('*.mac', '*.max'), ()),
293
+ 'MesonLexer': ('pip._vendor.pygments.lexers.meson', 'Meson', ('meson', 'meson.build'), ('meson.build', 'meson_options.txt'), ('text/x-meson',)),
294
+ 'MiniDLexer': ('pip._vendor.pygments.lexers.d', 'MiniD', ('minid',), (), ('text/x-minidsrc',)),
295
+ 'MiniScriptLexer': ('pip._vendor.pygments.lexers.scripting', 'MiniScript', ('miniscript', 'ms'), ('*.ms',), ('text/x-minicript', 'application/x-miniscript')),
296
+ 'ModelicaLexer': ('pip._vendor.pygments.lexers.modeling', 'Modelica', ('modelica',), ('*.mo',), ('text/x-modelica',)),
297
+ 'Modula2Lexer': ('pip._vendor.pygments.lexers.modula2', 'Modula-2', ('modula2', 'm2'), ('*.def', '*.mod'), ('text/x-modula2',)),
298
+ 'MoinWikiLexer': ('pip._vendor.pygments.lexers.markup', 'MoinMoin/Trac Wiki markup', ('trac-wiki', 'moin'), (), ('text/x-trac-wiki',)),
299
+ 'MonkeyLexer': ('pip._vendor.pygments.lexers.basic', 'Monkey', ('monkey',), ('*.monkey',), ('text/x-monkey',)),
300
+ 'MonteLexer': ('pip._vendor.pygments.lexers.monte', 'Monte', ('monte',), ('*.mt',), ()),
301
+ 'MoonScriptLexer': ('pip._vendor.pygments.lexers.scripting', 'MoonScript', ('moonscript', 'moon'), ('*.moon',), ('text/x-moonscript', 'application/x-moonscript')),
302
+ 'MoselLexer': ('pip._vendor.pygments.lexers.mosel', 'Mosel', ('mosel',), ('*.mos',), ()),
303
+ 'MozPreprocCssLexer': ('pip._vendor.pygments.lexers.markup', 'CSS+mozpreproc', ('css+mozpreproc',), ('*.css.in',), ()),
304
+ 'MozPreprocHashLexer': ('pip._vendor.pygments.lexers.markup', 'mozhashpreproc', ('mozhashpreproc',), (), ()),
305
+ 'MozPreprocJavascriptLexer': ('pip._vendor.pygments.lexers.markup', 'Javascript+mozpreproc', ('javascript+mozpreproc',), ('*.js.in',), ()),
306
+ 'MozPreprocPercentLexer': ('pip._vendor.pygments.lexers.markup', 'mozpercentpreproc', ('mozpercentpreproc',), (), ()),
307
+ 'MozPreprocXulLexer': ('pip._vendor.pygments.lexers.markup', 'XUL+mozpreproc', ('xul+mozpreproc',), ('*.xul.in',), ()),
308
+ 'MqlLexer': ('pip._vendor.pygments.lexers.c_like', 'MQL', ('mql', 'mq4', 'mq5', 'mql4', 'mql5'), ('*.mq4', '*.mq5', '*.mqh'), ('text/x-mql',)),
309
+ 'MscgenLexer': ('pip._vendor.pygments.lexers.dsls', 'Mscgen', ('mscgen', 'msc'), ('*.msc',), ()),
310
+ 'MuPADLexer': ('pip._vendor.pygments.lexers.algebra', 'MuPAD', ('mupad',), ('*.mu',), ()),
311
+ 'MxmlLexer': ('pip._vendor.pygments.lexers.actionscript', 'MXML', ('mxml',), ('*.mxml',), ()),
312
+ 'MySqlLexer': ('pip._vendor.pygments.lexers.sql', 'MySQL', ('mysql',), (), ('text/x-mysql',)),
313
+ 'MyghtyCssLexer': ('pip._vendor.pygments.lexers.templates', 'CSS+Myghty', ('css+myghty',), (), ('text/css+myghty',)),
314
+ 'MyghtyHtmlLexer': ('pip._vendor.pygments.lexers.templates', 'HTML+Myghty', ('html+myghty',), (), ('text/html+myghty',)),
315
+ 'MyghtyJavascriptLexer': ('pip._vendor.pygments.lexers.templates', 'JavaScript+Myghty', ('javascript+myghty', 'js+myghty'), (), ('application/x-javascript+myghty', 'text/x-javascript+myghty', 'text/javascript+mygthy')),
316
+ 'MyghtyLexer': ('pip._vendor.pygments.lexers.templates', 'Myghty', ('myghty',), ('*.myt', 'autodelegate'), ('application/x-myghty',)),
317
+ 'MyghtyXmlLexer': ('pip._vendor.pygments.lexers.templates', 'XML+Myghty', ('xml+myghty',), (), ('application/xml+myghty',)),
318
+ 'NCLLexer': ('pip._vendor.pygments.lexers.ncl', 'NCL', ('ncl',), ('*.ncl',), ('text/ncl',)),
319
+ 'NSISLexer': ('pip._vendor.pygments.lexers.installers', 'NSIS', ('nsis', 'nsi', 'nsh'), ('*.nsi', '*.nsh'), ('text/x-nsis',)),
320
+ 'NasmLexer': ('pip._vendor.pygments.lexers.asm', 'NASM', ('nasm',), ('*.asm', '*.ASM'), ('text/x-nasm',)),
321
+ 'NasmObjdumpLexer': ('pip._vendor.pygments.lexers.asm', 'objdump-nasm', ('objdump-nasm',), ('*.objdump-intel',), ('text/x-nasm-objdump',)),
322
+ 'NemerleLexer': ('pip._vendor.pygments.lexers.dotnet', 'Nemerle', ('nemerle',), ('*.n',), ('text/x-nemerle',)),
323
+ 'NesCLexer': ('pip._vendor.pygments.lexers.c_like', 'nesC', ('nesc',), ('*.nc',), ('text/x-nescsrc',)),
324
+ 'NestedTextLexer': ('pip._vendor.pygments.lexers.configs', 'NestedText', ('nestedtext', 'nt'), ('*.nt',), ()),
325
+ 'NewLispLexer': ('pip._vendor.pygments.lexers.lisp', 'NewLisp', ('newlisp',), ('*.lsp', '*.nl', '*.kif'), ('text/x-newlisp', 'application/x-newlisp')),
326
+ 'NewspeakLexer': ('pip._vendor.pygments.lexers.smalltalk', 'Newspeak', ('newspeak',), ('*.ns2',), ('text/x-newspeak',)),
327
+ 'NginxConfLexer': ('pip._vendor.pygments.lexers.configs', 'Nginx configuration file', ('nginx',), ('nginx.conf',), ('text/x-nginx-conf',)),
328
+ 'NimrodLexer': ('pip._vendor.pygments.lexers.nimrod', 'Nimrod', ('nimrod', 'nim'), ('*.nim', '*.nimrod'), ('text/x-nim',)),
329
+ 'NitLexer': ('pip._vendor.pygments.lexers.nit', 'Nit', ('nit',), ('*.nit',), ()),
330
+ 'NixLexer': ('pip._vendor.pygments.lexers.nix', 'Nix', ('nixos', 'nix'), ('*.nix',), ('text/x-nix',)),
331
+ 'NodeConsoleLexer': ('pip._vendor.pygments.lexers.javascript', 'Node.js REPL console session', ('nodejsrepl',), (), ('text/x-nodejsrepl',)),
332
+ 'NotmuchLexer': ('pip._vendor.pygments.lexers.textfmts', 'Notmuch', ('notmuch',), (), ()),
333
+ 'NuSMVLexer': ('pip._vendor.pygments.lexers.smv', 'NuSMV', ('nusmv',), ('*.smv',), ()),
334
+ 'NumPyLexer': ('pip._vendor.pygments.lexers.python', 'NumPy', ('numpy',), (), ()),
335
+ 'ObjdumpLexer': ('pip._vendor.pygments.lexers.asm', 'objdump', ('objdump',), ('*.objdump',), ('text/x-objdump',)),
336
+ 'ObjectiveCLexer': ('pip._vendor.pygments.lexers.objective', 'Objective-C', ('objective-c', 'objectivec', 'obj-c', 'objc'), ('*.m', '*.h'), ('text/x-objective-c',)),
337
+ 'ObjectiveCppLexer': ('pip._vendor.pygments.lexers.objective', 'Objective-C++', ('objective-c++', 'objectivec++', 'obj-c++', 'objc++'), ('*.mm', '*.hh'), ('text/x-objective-c++',)),
338
+ 'ObjectiveJLexer': ('pip._vendor.pygments.lexers.javascript', 'Objective-J', ('objective-j', 'objectivej', 'obj-j', 'objj'), ('*.j',), ('text/x-objective-j',)),
339
+ 'OcamlLexer': ('pip._vendor.pygments.lexers.ml', 'OCaml', ('ocaml',), ('*.ml', '*.mli', '*.mll', '*.mly'), ('text/x-ocaml',)),
340
+ 'OctaveLexer': ('pip._vendor.pygments.lexers.matlab', 'Octave', ('octave',), ('*.m',), ('text/octave',)),
341
+ 'OdinLexer': ('pip._vendor.pygments.lexers.archetype', 'ODIN', ('odin',), ('*.odin',), ('text/odin',)),
342
+ 'OmgIdlLexer': ('pip._vendor.pygments.lexers.c_like', 'OMG Interface Definition Language', ('omg-idl',), ('*.idl', '*.pidl'), ()),
343
+ 'OocLexer': ('pip._vendor.pygments.lexers.ooc', 'Ooc', ('ooc',), ('*.ooc',), ('text/x-ooc',)),
344
+ 'OpaLexer': ('pip._vendor.pygments.lexers.ml', 'Opa', ('opa',), ('*.opa',), ('text/x-opa',)),
345
+ 'OpenEdgeLexer': ('pip._vendor.pygments.lexers.business', 'OpenEdge ABL', ('openedge', 'abl', 'progress'), ('*.p', '*.cls'), ('text/x-openedge', 'application/x-openedge')),
346
+ 'OutputLexer': ('pip._vendor.pygments.lexers.special', 'Text output', ('output',), (), ()),
347
+ 'PacmanConfLexer': ('pip._vendor.pygments.lexers.configs', 'PacmanConf', ('pacmanconf',), ('pacman.conf',), ()),
348
+ 'PanLexer': ('pip._vendor.pygments.lexers.dsls', 'Pan', ('pan',), ('*.pan',), ()),
349
+ 'ParaSailLexer': ('pip._vendor.pygments.lexers.parasail', 'ParaSail', ('parasail',), ('*.psi', '*.psl'), ('text/x-parasail',)),
350
+ 'PawnLexer': ('pip._vendor.pygments.lexers.pawn', 'Pawn', ('pawn',), ('*.p', '*.pwn', '*.inc'), ('text/x-pawn',)),
351
+ 'PegLexer': ('pip._vendor.pygments.lexers.grammar_notation', 'PEG', ('peg',), ('*.peg',), ('text/x-peg',)),
352
+ 'Perl6Lexer': ('pip._vendor.pygments.lexers.perl', 'Perl6', ('perl6', 'pl6', 'raku'), ('*.pl', '*.pm', '*.nqp', '*.p6', '*.6pl', '*.p6l', '*.pl6', '*.6pm', '*.p6m', '*.pm6', '*.t', '*.raku', '*.rakumod', '*.rakutest', '*.rakudoc'), ('text/x-perl6', 'application/x-perl6')),
353
+ 'PerlLexer': ('pip._vendor.pygments.lexers.perl', 'Perl', ('perl', 'pl'), ('*.pl', '*.pm', '*.t', '*.perl'), ('text/x-perl', 'application/x-perl')),
354
+ 'PhpLexer': ('pip._vendor.pygments.lexers.php', 'PHP', ('php', 'php3', 'php4', 'php5'), ('*.php', '*.php[345]', '*.inc'), ('text/x-php',)),
355
+ 'PigLexer': ('pip._vendor.pygments.lexers.jvm', 'Pig', ('pig',), ('*.pig',), ('text/x-pig',)),
356
+ 'PikeLexer': ('pip._vendor.pygments.lexers.c_like', 'Pike', ('pike',), ('*.pike', '*.pmod'), ('text/x-pike',)),
357
+ 'PkgConfigLexer': ('pip._vendor.pygments.lexers.configs', 'PkgConfig', ('pkgconfig',), ('*.pc',), ()),
358
+ 'PlPgsqlLexer': ('pip._vendor.pygments.lexers.sql', 'PL/pgSQL', ('plpgsql',), (), ('text/x-plpgsql',)),
359
+ 'PointlessLexer': ('pip._vendor.pygments.lexers.pointless', 'Pointless', ('pointless',), ('*.ptls',), ()),
360
+ 'PonyLexer': ('pip._vendor.pygments.lexers.pony', 'Pony', ('pony',), ('*.pony',), ()),
361
+ 'PostScriptLexer': ('pip._vendor.pygments.lexers.graphics', 'PostScript', ('postscript', 'postscr'), ('*.ps', '*.eps'), ('application/postscript',)),
362
+ 'PostgresConsoleLexer': ('pip._vendor.pygments.lexers.sql', 'PostgreSQL console (psql)', ('psql', 'postgresql-console', 'postgres-console'), (), ('text/x-postgresql-psql',)),
363
+ 'PostgresLexer': ('pip._vendor.pygments.lexers.sql', 'PostgreSQL SQL dialect', ('postgresql', 'postgres'), (), ('text/x-postgresql',)),
364
+ 'PovrayLexer': ('pip._vendor.pygments.lexers.graphics', 'POVRay', ('pov',), ('*.pov', '*.inc'), ('text/x-povray',)),
365
+ 'PowerShellLexer': ('pip._vendor.pygments.lexers.shell', 'PowerShell', ('powershell', 'pwsh', 'posh', 'ps1', 'psm1'), ('*.ps1', '*.psm1'), ('text/x-powershell',)),
366
+ 'PowerShellSessionLexer': ('pip._vendor.pygments.lexers.shell', 'PowerShell Session', ('pwsh-session', 'ps1con'), (), ()),
367
+ 'PraatLexer': ('pip._vendor.pygments.lexers.praat', 'Praat', ('praat',), ('*.praat', '*.proc', '*.psc'), ()),
368
+ 'ProcfileLexer': ('pip._vendor.pygments.lexers.procfile', 'Procfile', ('procfile',), ('Procfile',), ()),
369
+ 'PrologLexer': ('pip._vendor.pygments.lexers.prolog', 'Prolog', ('prolog',), ('*.ecl', '*.prolog', '*.pro', '*.pl'), ('text/x-prolog',)),
370
+ 'PromQLLexer': ('pip._vendor.pygments.lexers.promql', 'PromQL', ('promql',), ('*.promql',), ()),
371
+ 'PropertiesLexer': ('pip._vendor.pygments.lexers.configs', 'Properties', ('properties', 'jproperties'), ('*.properties',), ('text/x-java-properties',)),
372
+ 'ProtoBufLexer': ('pip._vendor.pygments.lexers.dsls', 'Protocol Buffer', ('protobuf', 'proto'), ('*.proto',), ()),
373
+ 'PsyshConsoleLexer': ('pip._vendor.pygments.lexers.php', 'PsySH console session for PHP', ('psysh',), (), ()),
374
+ 'PugLexer': ('pip._vendor.pygments.lexers.html', 'Pug', ('pug', 'jade'), ('*.pug', '*.jade'), ('text/x-pug', 'text/x-jade')),
375
+ 'PuppetLexer': ('pip._vendor.pygments.lexers.dsls', 'Puppet', ('puppet',), ('*.pp',), ()),
376
+ 'PyPyLogLexer': ('pip._vendor.pygments.lexers.console', 'PyPy Log', ('pypylog', 'pypy'), ('*.pypylog',), ('application/x-pypylog',)),
377
+ 'Python2Lexer': ('pip._vendor.pygments.lexers.python', 'Python 2.x', ('python2', 'py2'), (), ('text/x-python2', 'application/x-python2')),
378
+ 'Python2TracebackLexer': ('pip._vendor.pygments.lexers.python', 'Python 2.x Traceback', ('py2tb',), ('*.py2tb',), ('text/x-python2-traceback',)),
379
+ 'PythonConsoleLexer': ('pip._vendor.pygments.lexers.python', 'Python console session', ('pycon',), (), ('text/x-python-doctest',)),
380
+ 'PythonLexer': ('pip._vendor.pygments.lexers.python', 'Python', ('python', 'py', 'sage', 'python3', 'py3'), ('*.py', '*.pyw', '*.jy', '*.sage', '*.sc', 'SConstruct', 'SConscript', '*.bzl', 'BUCK', 'BUILD', 'BUILD.bazel', 'WORKSPACE', '*.tac'), ('text/x-python', 'application/x-python', 'text/x-python3', 'application/x-python3')),
381
+ 'PythonTracebackLexer': ('pip._vendor.pygments.lexers.python', 'Python Traceback', ('pytb', 'py3tb'), ('*.pytb', '*.py3tb'), ('text/x-python-traceback', 'text/x-python3-traceback')),
382
+ 'QBasicLexer': ('pip._vendor.pygments.lexers.basic', 'QBasic', ('qbasic', 'basic'), ('*.BAS', '*.bas'), ('text/basic',)),
383
+ 'QVToLexer': ('pip._vendor.pygments.lexers.qvt', 'QVTO', ('qvto', 'qvt'), ('*.qvto',), ()),
384
+ 'QmlLexer': ('pip._vendor.pygments.lexers.webmisc', 'QML', ('qml', 'qbs'), ('*.qml', '*.qbs'), ('application/x-qml', 'application/x-qt.qbs+qml')),
385
+ 'RConsoleLexer': ('pip._vendor.pygments.lexers.r', 'RConsole', ('rconsole', 'rout'), ('*.Rout',), ()),
386
+ 'RNCCompactLexer': ('pip._vendor.pygments.lexers.rnc', 'Relax-NG Compact', ('rng-compact', 'rnc'), ('*.rnc',), ()),
387
+ 'RPMSpecLexer': ('pip._vendor.pygments.lexers.installers', 'RPMSpec', ('spec',), ('*.spec',), ('text/x-rpm-spec',)),
388
+ 'RacketLexer': ('pip._vendor.pygments.lexers.lisp', 'Racket', ('racket', 'rkt'), ('*.rkt', '*.rktd', '*.rktl'), ('text/x-racket', 'application/x-racket')),
389
+ 'RagelCLexer': ('pip._vendor.pygments.lexers.parsers', 'Ragel in C Host', ('ragel-c',), ('*.rl',), ()),
390
+ 'RagelCppLexer': ('pip._vendor.pygments.lexers.parsers', 'Ragel in CPP Host', ('ragel-cpp',), ('*.rl',), ()),
391
+ 'RagelDLexer': ('pip._vendor.pygments.lexers.parsers', 'Ragel in D Host', ('ragel-d',), ('*.rl',), ()),
392
+ 'RagelEmbeddedLexer': ('pip._vendor.pygments.lexers.parsers', 'Embedded Ragel', ('ragel-em',), ('*.rl',), ()),
393
+ 'RagelJavaLexer': ('pip._vendor.pygments.lexers.parsers', 'Ragel in Java Host', ('ragel-java',), ('*.rl',), ()),
394
+ 'RagelLexer': ('pip._vendor.pygments.lexers.parsers', 'Ragel', ('ragel',), (), ()),
395
+ 'RagelObjectiveCLexer': ('pip._vendor.pygments.lexers.parsers', 'Ragel in Objective C Host', ('ragel-objc',), ('*.rl',), ()),
396
+ 'RagelRubyLexer': ('pip._vendor.pygments.lexers.parsers', 'Ragel in Ruby Host', ('ragel-ruby', 'ragel-rb'), ('*.rl',), ()),
397
+ 'RawTokenLexer': ('pip._vendor.pygments.lexers.special', 'Raw token data', (), (), ('application/x-pygments-tokens',)),
398
+ 'RdLexer': ('pip._vendor.pygments.lexers.r', 'Rd', ('rd',), ('*.Rd',), ('text/x-r-doc',)),
399
+ 'ReasonLexer': ('pip._vendor.pygments.lexers.ml', 'ReasonML', ('reasonml', 'reason'), ('*.re', '*.rei'), ('text/x-reasonml',)),
400
+ 'RebolLexer': ('pip._vendor.pygments.lexers.rebol', 'REBOL', ('rebol',), ('*.r', '*.r3', '*.reb'), ('text/x-rebol',)),
401
+ 'RedLexer': ('pip._vendor.pygments.lexers.rebol', 'Red', ('red', 'red/system'), ('*.red', '*.reds'), ('text/x-red', 'text/x-red-system')),
402
+ 'RedcodeLexer': ('pip._vendor.pygments.lexers.esoteric', 'Redcode', ('redcode',), ('*.cw',), ()),
403
+ 'RegeditLexer': ('pip._vendor.pygments.lexers.configs', 'reg', ('registry',), ('*.reg',), ('text/x-windows-registry',)),
404
+ 'ResourceLexer': ('pip._vendor.pygments.lexers.resource', 'ResourceBundle', ('resourcebundle', 'resource'), (), ()),
405
+ 'RexxLexer': ('pip._vendor.pygments.lexers.scripting', 'Rexx', ('rexx', 'arexx'), ('*.rexx', '*.rex', '*.rx', '*.arexx'), ('text/x-rexx',)),
406
+ 'RhtmlLexer': ('pip._vendor.pygments.lexers.templates', 'RHTML', ('rhtml', 'html+erb', 'html+ruby'), ('*.rhtml',), ('text/html+ruby',)),
407
+ 'RideLexer': ('pip._vendor.pygments.lexers.ride', 'Ride', ('ride',), ('*.ride',), ('text/x-ride',)),
408
+ 'RitaLexer': ('pip._vendor.pygments.lexers.rita', 'Rita', ('rita',), ('*.rita',), ('text/rita',)),
409
+ 'RoboconfGraphLexer': ('pip._vendor.pygments.lexers.roboconf', 'Roboconf Graph', ('roboconf-graph',), ('*.graph',), ()),
410
+ 'RoboconfInstancesLexer': ('pip._vendor.pygments.lexers.roboconf', 'Roboconf Instances', ('roboconf-instances',), ('*.instances',), ()),
411
+ 'RobotFrameworkLexer': ('pip._vendor.pygments.lexers.robotframework', 'RobotFramework', ('robotframework',), ('*.robot',), ('text/x-robotframework',)),
412
+ 'RqlLexer': ('pip._vendor.pygments.lexers.sql', 'RQL', ('rql',), ('*.rql',), ('text/x-rql',)),
413
+ 'RslLexer': ('pip._vendor.pygments.lexers.dsls', 'RSL', ('rsl',), ('*.rsl',), ('text/rsl',)),
414
+ 'RstLexer': ('pip._vendor.pygments.lexers.markup', 'reStructuredText', ('restructuredtext', 'rst', 'rest'), ('*.rst', '*.rest'), ('text/x-rst', 'text/prs.fallenstein.rst')),
415
+ 'RtsLexer': ('pip._vendor.pygments.lexers.trafficscript', 'TrafficScript', ('trafficscript', 'rts'), ('*.rts',), ()),
416
+ 'RubyConsoleLexer': ('pip._vendor.pygments.lexers.ruby', 'Ruby irb session', ('rbcon', 'irb'), (), ('text/x-ruby-shellsession',)),
417
+ 'RubyLexer': ('pip._vendor.pygments.lexers.ruby', 'Ruby', ('ruby', 'rb', 'duby'), ('*.rb', '*.rbw', 'Rakefile', '*.rake', '*.gemspec', '*.rbx', '*.duby', 'Gemfile', 'Vagrantfile'), ('text/x-ruby', 'application/x-ruby')),
418
+ 'RustLexer': ('pip._vendor.pygments.lexers.rust', 'Rust', ('rust', 'rs'), ('*.rs', '*.rs.in'), ('text/rust', 'text/x-rust')),
419
+ 'SASLexer': ('pip._vendor.pygments.lexers.sas', 'SAS', ('sas',), ('*.SAS', '*.sas'), ('text/x-sas', 'text/sas', 'application/x-sas')),
420
+ 'SLexer': ('pip._vendor.pygments.lexers.r', 'S', ('splus', 's', 'r'), ('*.S', '*.R', '.Rhistory', '.Rprofile', '.Renviron'), ('text/S-plus', 'text/S', 'text/x-r-source', 'text/x-r', 'text/x-R', 'text/x-r-history', 'text/x-r-profile')),
421
+ 'SMLLexer': ('pip._vendor.pygments.lexers.ml', 'Standard ML', ('sml',), ('*.sml', '*.sig', '*.fun'), ('text/x-standardml', 'application/x-standardml')),
422
+ 'SarlLexer': ('pip._vendor.pygments.lexers.jvm', 'SARL', ('sarl',), ('*.sarl',), ('text/x-sarl',)),
423
+ 'SassLexer': ('pip._vendor.pygments.lexers.css', 'Sass', ('sass',), ('*.sass',), ('text/x-sass',)),
424
+ 'SaviLexer': ('pip._vendor.pygments.lexers.savi', 'Savi', ('savi',), ('*.savi',), ()),
425
+ 'ScalaLexer': ('pip._vendor.pygments.lexers.jvm', 'Scala', ('scala',), ('*.scala',), ('text/x-scala',)),
426
+ 'ScamlLexer': ('pip._vendor.pygments.lexers.html', 'Scaml', ('scaml',), ('*.scaml',), ('text/x-scaml',)),
427
+ 'ScdocLexer': ('pip._vendor.pygments.lexers.scdoc', 'scdoc', ('scdoc', 'scd'), ('*.scd', '*.scdoc'), ()),
428
+ 'SchemeLexer': ('pip._vendor.pygments.lexers.lisp', 'Scheme', ('scheme', 'scm'), ('*.scm', '*.ss'), ('text/x-scheme', 'application/x-scheme')),
429
+ 'ScilabLexer': ('pip._vendor.pygments.lexers.matlab', 'Scilab', ('scilab',), ('*.sci', '*.sce', '*.tst'), ('text/scilab',)),
430
+ 'ScssLexer': ('pip._vendor.pygments.lexers.css', 'SCSS', ('scss',), ('*.scss',), ('text/x-scss',)),
431
+ 'SedLexer': ('pip._vendor.pygments.lexers.textedit', 'Sed', ('sed', 'gsed', 'ssed'), ('*.sed', '*.[gs]sed'), ('text/x-sed',)),
432
+ 'ShExCLexer': ('pip._vendor.pygments.lexers.rdf', 'ShExC', ('shexc', 'shex'), ('*.shex',), ('text/shex',)),
433
+ 'ShenLexer': ('pip._vendor.pygments.lexers.lisp', 'Shen', ('shen',), ('*.shen',), ('text/x-shen', 'application/x-shen')),
434
+ 'SieveLexer': ('pip._vendor.pygments.lexers.sieve', 'Sieve', ('sieve',), ('*.siv', '*.sieve'), ()),
435
+ 'SilverLexer': ('pip._vendor.pygments.lexers.verification', 'Silver', ('silver',), ('*.sil', '*.vpr'), ()),
436
+ 'SingularityLexer': ('pip._vendor.pygments.lexers.configs', 'Singularity', ('singularity',), ('*.def', 'Singularity'), ()),
437
+ 'SlashLexer': ('pip._vendor.pygments.lexers.slash', 'Slash', ('slash',), ('*.sla',), ()),
438
+ 'SlimLexer': ('pip._vendor.pygments.lexers.webmisc', 'Slim', ('slim',), ('*.slim',), ('text/x-slim',)),
439
+ 'SlurmBashLexer': ('pip._vendor.pygments.lexers.shell', 'Slurm', ('slurm', 'sbatch'), ('*.sl',), ()),
440
+ 'SmaliLexer': ('pip._vendor.pygments.lexers.dalvik', 'Smali', ('smali',), ('*.smali',), ('text/smali',)),
441
+ 'SmalltalkLexer': ('pip._vendor.pygments.lexers.smalltalk', 'Smalltalk', ('smalltalk', 'squeak', 'st'), ('*.st',), ('text/x-smalltalk',)),
442
+ 'SmartGameFormatLexer': ('pip._vendor.pygments.lexers.sgf', 'SmartGameFormat', ('sgf',), ('*.sgf',), ()),
443
+ 'SmartyLexer': ('pip._vendor.pygments.lexers.templates', 'Smarty', ('smarty',), ('*.tpl',), ('application/x-smarty',)),
444
+ 'SmithyLexer': ('pip._vendor.pygments.lexers.smithy', 'Smithy', ('smithy',), ('*.smithy',), ()),
445
+ 'SnobolLexer': ('pip._vendor.pygments.lexers.snobol', 'Snobol', ('snobol',), ('*.snobol',), ('text/x-snobol',)),
446
+ 'SnowballLexer': ('pip._vendor.pygments.lexers.dsls', 'Snowball', ('snowball',), ('*.sbl',), ()),
447
+ 'SolidityLexer': ('pip._vendor.pygments.lexers.solidity', 'Solidity', ('solidity',), ('*.sol',), ()),
448
+ 'SophiaLexer': ('pip._vendor.pygments.lexers.sophia', 'Sophia', ('sophia',), ('*.aes',), ()),
449
+ 'SourcePawnLexer': ('pip._vendor.pygments.lexers.pawn', 'SourcePawn', ('sp',), ('*.sp',), ('text/x-sourcepawn',)),
450
+ 'SourcesListLexer': ('pip._vendor.pygments.lexers.installers', 'Debian Sourcelist', ('debsources', 'sourceslist', 'sources.list'), ('sources.list',), ()),
451
+ 'SparqlLexer': ('pip._vendor.pygments.lexers.rdf', 'SPARQL', ('sparql',), ('*.rq', '*.sparql'), ('application/sparql-query',)),
452
+ 'SpiceLexer': ('pip._vendor.pygments.lexers.spice', 'Spice', ('spice', 'spicelang'), ('*.spice',), ('text/x-spice',)),
453
+ 'SqlLexer': ('pip._vendor.pygments.lexers.sql', 'SQL', ('sql',), ('*.sql',), ('text/x-sql',)),
454
+ 'SqliteConsoleLexer': ('pip._vendor.pygments.lexers.sql', 'sqlite3con', ('sqlite3',), ('*.sqlite3-console',), ('text/x-sqlite3-console',)),
455
+ 'SquidConfLexer': ('pip._vendor.pygments.lexers.configs', 'SquidConf', ('squidconf', 'squid.conf', 'squid'), ('squid.conf',), ('text/x-squidconf',)),
456
+ 'SrcinfoLexer': ('pip._vendor.pygments.lexers.srcinfo', 'Srcinfo', ('srcinfo',), ('.SRCINFO',), ()),
457
+ 'SspLexer': ('pip._vendor.pygments.lexers.templates', 'Scalate Server Page', ('ssp',), ('*.ssp',), ('application/x-ssp',)),
458
+ 'StanLexer': ('pip._vendor.pygments.lexers.modeling', 'Stan', ('stan',), ('*.stan',), ()),
459
+ 'StataLexer': ('pip._vendor.pygments.lexers.stata', 'Stata', ('stata', 'do'), ('*.do', '*.ado'), ('text/x-stata', 'text/stata', 'application/x-stata')),
460
+ 'SuperColliderLexer': ('pip._vendor.pygments.lexers.supercollider', 'SuperCollider', ('supercollider', 'sc'), ('*.sc', '*.scd'), ('application/supercollider', 'text/supercollider')),
461
+ 'SwiftLexer': ('pip._vendor.pygments.lexers.objective', 'Swift', ('swift',), ('*.swift',), ('text/x-swift',)),
462
+ 'SwigLexer': ('pip._vendor.pygments.lexers.c_like', 'SWIG', ('swig',), ('*.swg', '*.i'), ('text/swig',)),
463
+ 'SystemVerilogLexer': ('pip._vendor.pygments.lexers.hdl', 'systemverilog', ('systemverilog', 'sv'), ('*.sv', '*.svh'), ('text/x-systemverilog',)),
464
+ 'TAPLexer': ('pip._vendor.pygments.lexers.testing', 'TAP', ('tap',), ('*.tap',), ()),
465
+ 'TNTLexer': ('pip._vendor.pygments.lexers.tnt', 'Typographic Number Theory', ('tnt',), ('*.tnt',), ()),
466
+ 'TOMLLexer': ('pip._vendor.pygments.lexers.configs', 'TOML', ('toml',), ('*.toml', 'Pipfile', 'poetry.lock'), ()),
467
+ 'Tads3Lexer': ('pip._vendor.pygments.lexers.int_fiction', 'TADS 3', ('tads3',), ('*.t',), ()),
468
+ 'TasmLexer': ('pip._vendor.pygments.lexers.asm', 'TASM', ('tasm',), ('*.asm', '*.ASM', '*.tasm'), ('text/x-tasm',)),
469
+ 'TclLexer': ('pip._vendor.pygments.lexers.tcl', 'Tcl', ('tcl',), ('*.tcl', '*.rvt'), ('text/x-tcl', 'text/x-script.tcl', 'application/x-tcl')),
470
+ 'TcshLexer': ('pip._vendor.pygments.lexers.shell', 'Tcsh', ('tcsh', 'csh'), ('*.tcsh', '*.csh'), ('application/x-csh',)),
471
+ 'TcshSessionLexer': ('pip._vendor.pygments.lexers.shell', 'Tcsh Session', ('tcshcon',), (), ()),
472
+ 'TeaTemplateLexer': ('pip._vendor.pygments.lexers.templates', 'Tea', ('tea',), ('*.tea',), ('text/x-tea',)),
473
+ 'TealLexer': ('pip._vendor.pygments.lexers.teal', 'teal', ('teal',), ('*.teal',), ()),
474
+ 'TeraTermLexer': ('pip._vendor.pygments.lexers.teraterm', 'Tera Term macro', ('teratermmacro', 'teraterm', 'ttl'), ('*.ttl',), ('text/x-teratermmacro',)),
475
+ 'TermcapLexer': ('pip._vendor.pygments.lexers.configs', 'Termcap', ('termcap',), ('termcap', 'termcap.src'), ()),
476
+ 'TerminfoLexer': ('pip._vendor.pygments.lexers.configs', 'Terminfo', ('terminfo',), ('terminfo', 'terminfo.src'), ()),
477
+ 'TerraformLexer': ('pip._vendor.pygments.lexers.configs', 'Terraform', ('terraform', 'tf'), ('*.tf',), ('application/x-tf', 'application/x-terraform')),
478
+ 'TexLexer': ('pip._vendor.pygments.lexers.markup', 'TeX', ('tex', 'latex'), ('*.tex', '*.aux', '*.toc'), ('text/x-tex', 'text/x-latex')),
479
+ 'TextLexer': ('pip._vendor.pygments.lexers.special', 'Text only', ('text',), ('*.txt',), ('text/plain',)),
480
+ 'ThingsDBLexer': ('pip._vendor.pygments.lexers.thingsdb', 'ThingsDB', ('ti', 'thingsdb'), ('*.ti',), ()),
481
+ 'ThriftLexer': ('pip._vendor.pygments.lexers.dsls', 'Thrift', ('thrift',), ('*.thrift',), ('application/x-thrift',)),
482
+ 'TiddlyWiki5Lexer': ('pip._vendor.pygments.lexers.markup', 'tiddler', ('tid',), ('*.tid',), ('text/vnd.tiddlywiki',)),
483
+ 'TodotxtLexer': ('pip._vendor.pygments.lexers.textfmts', 'Todotxt', ('todotxt',), ('todo.txt', '*.todotxt'), ('text/x-todo',)),
484
+ 'TransactSqlLexer': ('pip._vendor.pygments.lexers.sql', 'Transact-SQL', ('tsql', 't-sql'), ('*.sql',), ('text/x-tsql',)),
485
+ 'TreetopLexer': ('pip._vendor.pygments.lexers.parsers', 'Treetop', ('treetop',), ('*.treetop', '*.tt'), ()),
486
+ 'TurtleLexer': ('pip._vendor.pygments.lexers.rdf', 'Turtle', ('turtle',), ('*.ttl',), ('text/turtle', 'application/x-turtle')),
487
+ 'TwigHtmlLexer': ('pip._vendor.pygments.lexers.templates', 'HTML+Twig', ('html+twig',), ('*.twig',), ('text/html+twig',)),
488
+ 'TwigLexer': ('pip._vendor.pygments.lexers.templates', 'Twig', ('twig',), (), ('application/x-twig',)),
489
+ 'TypeScriptLexer': ('pip._vendor.pygments.lexers.javascript', 'TypeScript', ('typescript', 'ts'), ('*.ts',), ('application/x-typescript', 'text/x-typescript')),
490
+ 'TypoScriptCssDataLexer': ('pip._vendor.pygments.lexers.typoscript', 'TypoScriptCssData', ('typoscriptcssdata',), (), ()),
491
+ 'TypoScriptHtmlDataLexer': ('pip._vendor.pygments.lexers.typoscript', 'TypoScriptHtmlData', ('typoscripthtmldata',), (), ()),
492
+ 'TypoScriptLexer': ('pip._vendor.pygments.lexers.typoscript', 'TypoScript', ('typoscript',), ('*.typoscript',), ('text/x-typoscript',)),
493
+ 'UcodeLexer': ('pip._vendor.pygments.lexers.unicon', 'ucode', ('ucode',), ('*.u', '*.u1', '*.u2'), ()),
494
+ 'UniconLexer': ('pip._vendor.pygments.lexers.unicon', 'Unicon', ('unicon',), ('*.icn',), ('text/unicon',)),
495
+ 'UrbiscriptLexer': ('pip._vendor.pygments.lexers.urbi', 'UrbiScript', ('urbiscript',), ('*.u',), ('application/x-urbiscript',)),
496
+ 'UsdLexer': ('pip._vendor.pygments.lexers.usd', 'USD', ('usd', 'usda'), ('*.usd', '*.usda'), ()),
497
+ 'VBScriptLexer': ('pip._vendor.pygments.lexers.basic', 'VBScript', ('vbscript',), ('*.vbs', '*.VBS'), ()),
498
+ 'VCLLexer': ('pip._vendor.pygments.lexers.varnish', 'VCL', ('vcl',), ('*.vcl',), ('text/x-vclsrc',)),
499
+ 'VCLSnippetLexer': ('pip._vendor.pygments.lexers.varnish', 'VCLSnippets', ('vclsnippets', 'vclsnippet'), (), ('text/x-vclsnippet',)),
500
+ 'VCTreeStatusLexer': ('pip._vendor.pygments.lexers.console', 'VCTreeStatus', ('vctreestatus',), (), ()),
501
+ 'VGLLexer': ('pip._vendor.pygments.lexers.dsls', 'VGL', ('vgl',), ('*.rpf',), ()),
502
+ 'ValaLexer': ('pip._vendor.pygments.lexers.c_like', 'Vala', ('vala', 'vapi'), ('*.vala', '*.vapi'), ('text/x-vala',)),
503
+ 'VbNetAspxLexer': ('pip._vendor.pygments.lexers.dotnet', 'aspx-vb', ('aspx-vb',), ('*.aspx', '*.asax', '*.ascx', '*.ashx', '*.asmx', '*.axd'), ()),
504
+ 'VbNetLexer': ('pip._vendor.pygments.lexers.dotnet', 'VB.net', ('vb.net', 'vbnet'), ('*.vb', '*.bas'), ('text/x-vbnet', 'text/x-vba')),
505
+ 'VelocityHtmlLexer': ('pip._vendor.pygments.lexers.templates', 'HTML+Velocity', ('html+velocity',), (), ('text/html+velocity',)),
506
+ 'VelocityLexer': ('pip._vendor.pygments.lexers.templates', 'Velocity', ('velocity',), ('*.vm', '*.fhtml'), ()),
507
+ 'VelocityXmlLexer': ('pip._vendor.pygments.lexers.templates', 'XML+Velocity', ('xml+velocity',), (), ('application/xml+velocity',)),
508
+ 'VerilogLexer': ('pip._vendor.pygments.lexers.hdl', 'verilog', ('verilog', 'v'), ('*.v',), ('text/x-verilog',)),
509
+ 'VhdlLexer': ('pip._vendor.pygments.lexers.hdl', 'vhdl', ('vhdl',), ('*.vhdl', '*.vhd'), ('text/x-vhdl',)),
510
+ 'VimLexer': ('pip._vendor.pygments.lexers.textedit', 'VimL', ('vim',), ('*.vim', '.vimrc', '.exrc', '.gvimrc', '_vimrc', '_exrc', '_gvimrc', 'vimrc', 'gvimrc'), ('text/x-vim',)),
511
+ 'WDiffLexer': ('pip._vendor.pygments.lexers.diff', 'WDiff', ('wdiff',), ('*.wdiff',), ()),
512
+ 'WatLexer': ('pip._vendor.pygments.lexers.webassembly', 'WebAssembly', ('wast', 'wat'), ('*.wat', '*.wast'), ()),
513
+ 'WebIDLLexer': ('pip._vendor.pygments.lexers.webidl', 'Web IDL', ('webidl',), ('*.webidl',), ()),
514
+ 'WhileyLexer': ('pip._vendor.pygments.lexers.whiley', 'Whiley', ('whiley',), ('*.whiley',), ('text/x-whiley',)),
515
+ 'X10Lexer': ('pip._vendor.pygments.lexers.x10', 'X10', ('x10', 'xten'), ('*.x10',), ('text/x-x10',)),
516
+ 'XQueryLexer': ('pip._vendor.pygments.lexers.webmisc', 'XQuery', ('xquery', 'xqy', 'xq', 'xql', 'xqm'), ('*.xqy', '*.xquery', '*.xq', '*.xql', '*.xqm'), ('text/xquery', 'application/xquery')),
517
+ 'XmlDjangoLexer': ('pip._vendor.pygments.lexers.templates', 'XML+Django/Jinja', ('xml+django', 'xml+jinja'), (), ('application/xml+django', 'application/xml+jinja')),
518
+ 'XmlErbLexer': ('pip._vendor.pygments.lexers.templates', 'XML+Ruby', ('xml+ruby', 'xml+erb'), (), ('application/xml+ruby',)),
519
+ 'XmlLexer': ('pip._vendor.pygments.lexers.html', 'XML', ('xml',), ('*.xml', '*.xsl', '*.rss', '*.xslt', '*.xsd', '*.wsdl', '*.wsf'), ('text/xml', 'application/xml', 'image/svg+xml', 'application/rss+xml', 'application/atom+xml')),
520
+ 'XmlPhpLexer': ('pip._vendor.pygments.lexers.templates', 'XML+PHP', ('xml+php',), (), ('application/xml+php',)),
521
+ 'XmlSmartyLexer': ('pip._vendor.pygments.lexers.templates', 'XML+Smarty', ('xml+smarty',), (), ('application/xml+smarty',)),
522
+ 'XorgLexer': ('pip._vendor.pygments.lexers.xorg', 'Xorg', ('xorg.conf',), ('xorg.conf',), ()),
523
+ 'XsltLexer': ('pip._vendor.pygments.lexers.html', 'XSLT', ('xslt',), ('*.xsl', '*.xslt', '*.xpl'), ('application/xsl+xml', 'application/xslt+xml')),
524
+ 'XtendLexer': ('pip._vendor.pygments.lexers.jvm', 'Xtend', ('xtend',), ('*.xtend',), ('text/x-xtend',)),
525
+ 'XtlangLexer': ('pip._vendor.pygments.lexers.lisp', 'xtlang', ('extempore',), ('*.xtm',), ()),
526
+ 'YamlJinjaLexer': ('pip._vendor.pygments.lexers.templates', 'YAML+Jinja', ('yaml+jinja', 'salt', 'sls'), ('*.sls',), ('text/x-yaml+jinja', 'text/x-sls')),
527
+ 'YamlLexer': ('pip._vendor.pygments.lexers.data', 'YAML', ('yaml',), ('*.yaml', '*.yml'), ('text/x-yaml',)),
528
+ 'YangLexer': ('pip._vendor.pygments.lexers.yang', 'YANG', ('yang',), ('*.yang',), ('application/yang',)),
529
+ 'ZeekLexer': ('pip._vendor.pygments.lexers.dsls', 'Zeek', ('zeek', 'bro'), ('*.zeek', '*.bro'), ()),
530
+ 'ZephirLexer': ('pip._vendor.pygments.lexers.php', 'Zephir', ('zephir',), ('*.zep',), ()),
531
+ 'ZigLexer': ('pip._vendor.pygments.lexers.zig', 'Zig', ('zig',), ('*.zig',), ('text/zig',)),
532
+ 'apdlexer': ('pip._vendor.pygments.lexers.apdlexer', 'ANSYS parametric design language', ('ansys', 'apdl'), ('*.ans',), ()),
533
+ }
534
+
535
+ if __name__ == '__main__': # pragma: no cover
536
+ import sys
537
+ import os
538
+
539
+ # lookup lexers
540
+ found_lexers = []
541
+ sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', '..'))
542
+ for root, dirs, files in os.walk('.'):
543
+ for filename in files:
544
+ if filename.endswith('.py') and not filename.startswith('_'):
545
+ module_name = 'pygments.lexers%s.%s' % (
546
+ root[1:].replace('/', '.'), filename[:-3])
547
+ print(module_name)
548
+ module = __import__(module_name, None, None, [''])
549
+ for lexer_name in module.__all__:
550
+ lexer = getattr(module, lexer_name)
551
+ found_lexers.append(
552
+ '%r: %r' % (lexer_name,
553
+ (module_name,
554
+ lexer.name,
555
+ tuple(lexer.aliases),
556
+ tuple(lexer.filenames),
557
+ tuple(lexer.mimetypes))))
558
+ # sort them to make the diff minimal
559
+ found_lexers.sort()
560
+
561
+ # extract useful sourcecode from this file
562
+ with open(__file__) as fp:
563
+ content = fp.read()
564
+ # replace crnl to nl for Windows.
565
+ #
566
+ # Note that, originally, contributers should keep nl of master
567
+ # repository, for example by using some kind of automatic
568
+ # management EOL, like `EolExtension
569
+ # <https://www.mercurial-scm.org/wiki/EolExtension>`.
570
+ content = content.replace("\r\n", "\n")
571
+ header = content[:content.find('LEXERS = {')]
572
+ footer = content[content.find("if __name__ == '__main__':"):]
573
+
574
+ # write new file
575
+ with open(__file__, 'w') as fp:
576
+ fp.write(header)
577
+ fp.write('LEXERS = {\n %s,\n}\n\n' % ',\n '.join(found_lexers))
578
+ fp.write(footer)
579
+
580
+ print ('=== %d lexers processed.' % len(found_lexers))
venv/lib/python3.10/site-packages/pip/_vendor/pygments/lexers/python.py ADDED
@@ -0,0 +1,1188 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.lexers.python
3
+ ~~~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Lexers for Python and related languages.
6
+
7
+ :copyright: Copyright 2006-2021 by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ import re
12
+ import keyword
13
+
14
+ from pip._vendor.pygments.lexer import Lexer, RegexLexer, include, bygroups, using, \
15
+ default, words, combined, do_insertions, this
16
+ from pip._vendor.pygments.util import get_bool_opt, shebang_matches
17
+ from pip._vendor.pygments.token import Text, Comment, Operator, Keyword, Name, String, \
18
+ Number, Punctuation, Generic, Other, Error
19
+ from pip._vendor.pygments import unistring as uni
20
+
21
+ __all__ = ['PythonLexer', 'PythonConsoleLexer', 'PythonTracebackLexer',
22
+ 'Python2Lexer', 'Python2TracebackLexer',
23
+ 'CythonLexer', 'DgLexer', 'NumPyLexer']
24
+
25
+ line_re = re.compile('.*?\n')
26
+
27
+
28
+ class PythonLexer(RegexLexer):
29
+ """
30
+ For `Python <http://www.python.org>`_ source code (version 3.x).
31
+
32
+ .. versionadded:: 0.10
33
+
34
+ .. versionchanged:: 2.5
35
+ This is now the default ``PythonLexer``. It is still available as the
36
+ alias ``Python3Lexer``.
37
+ """
38
+
39
+ name = 'Python'
40
+ aliases = ['python', 'py', 'sage', 'python3', 'py3']
41
+ filenames = [
42
+ '*.py',
43
+ '*.pyw',
44
+ # Jython
45
+ '*.jy',
46
+ # Sage
47
+ '*.sage',
48
+ # SCons
49
+ '*.sc',
50
+ 'SConstruct',
51
+ 'SConscript',
52
+ # Skylark/Starlark (used by Bazel, Buck, and Pants)
53
+ '*.bzl',
54
+ 'BUCK',
55
+ 'BUILD',
56
+ 'BUILD.bazel',
57
+ 'WORKSPACE',
58
+ # Twisted Application infrastructure
59
+ '*.tac',
60
+ ]
61
+ mimetypes = ['text/x-python', 'application/x-python',
62
+ 'text/x-python3', 'application/x-python3']
63
+
64
+ flags = re.MULTILINE | re.UNICODE
65
+
66
+ uni_name = "[%s][%s]*" % (uni.xid_start, uni.xid_continue)
67
+
68
+ def innerstring_rules(ttype):
69
+ return [
70
+ # the old style '%s' % (...) string formatting (still valid in Py3)
71
+ (r'%(\(\w+\))?[-#0 +]*([0-9]+|[*])?(\.([0-9]+|[*]))?'
72
+ '[hlL]?[E-GXc-giorsaux%]', String.Interpol),
73
+ # the new style '{}'.format(...) string formatting
74
+ (r'\{'
75
+ r'((\w+)((\.\w+)|(\[[^\]]+\]))*)?' # field name
76
+ r'(\![sra])?' # conversion
77
+ r'(\:(.?[<>=\^])?[-+ ]?#?0?(\d+)?,?(\.\d+)?[E-GXb-gnosx%]?)?'
78
+ r'\}', String.Interpol),
79
+
80
+ # backslashes, quotes and formatting signs must be parsed one at a time
81
+ (r'[^\\\'"%{\n]+', ttype),
82
+ (r'[\'"\\]', ttype),
83
+ # unhandled string formatting sign
84
+ (r'%|(\{{1,2})', ttype)
85
+ # newlines are an error (use "nl" state)
86
+ ]
87
+
88
+ def fstring_rules(ttype):
89
+ return [
90
+ # Assuming that a '}' is the closing brace after format specifier.
91
+ # Sadly, this means that we won't detect syntax error. But it's
92
+ # more important to parse correct syntax correctly, than to
93
+ # highlight invalid syntax.
94
+ (r'\}', String.Interpol),
95
+ (r'\{', String.Interpol, 'expr-inside-fstring'),
96
+ # backslashes, quotes and formatting signs must be parsed one at a time
97
+ (r'[^\\\'"{}\n]+', ttype),
98
+ (r'[\'"\\]', ttype),
99
+ # newlines are an error (use "nl" state)
100
+ ]
101
+
102
+ tokens = {
103
+ 'root': [
104
+ (r'\n', Text),
105
+ (r'^(\s*)([rRuUbB]{,2})("""(?:.|\n)*?""")',
106
+ bygroups(Text, String.Affix, String.Doc)),
107
+ (r"^(\s*)([rRuUbB]{,2})('''(?:.|\n)*?''')",
108
+ bygroups(Text, String.Affix, String.Doc)),
109
+ (r'\A#!.+$', Comment.Hashbang),
110
+ (r'#.*$', Comment.Single),
111
+ (r'\\\n', Text),
112
+ (r'\\', Text),
113
+ include('keywords'),
114
+ include('soft-keywords'),
115
+ (r'(def)((?:\s|\\\s)+)', bygroups(Keyword, Text), 'funcname'),
116
+ (r'(class)((?:\s|\\\s)+)', bygroups(Keyword, Text), 'classname'),
117
+ (r'(from)((?:\s|\\\s)+)', bygroups(Keyword.Namespace, Text),
118
+ 'fromimport'),
119
+ (r'(import)((?:\s|\\\s)+)', bygroups(Keyword.Namespace, Text),
120
+ 'import'),
121
+ include('expr'),
122
+ ],
123
+ 'expr': [
124
+ # raw f-strings
125
+ ('(?i)(rf|fr)(""")',
126
+ bygroups(String.Affix, String.Double),
127
+ combined('rfstringescape', 'tdqf')),
128
+ ("(?i)(rf|fr)(''')",
129
+ bygroups(String.Affix, String.Single),
130
+ combined('rfstringescape', 'tsqf')),
131
+ ('(?i)(rf|fr)(")',
132
+ bygroups(String.Affix, String.Double),
133
+ combined('rfstringescape', 'dqf')),
134
+ ("(?i)(rf|fr)(')",
135
+ bygroups(String.Affix, String.Single),
136
+ combined('rfstringescape', 'sqf')),
137
+ # non-raw f-strings
138
+ ('([fF])(""")', bygroups(String.Affix, String.Double),
139
+ combined('fstringescape', 'tdqf')),
140
+ ("([fF])(''')", bygroups(String.Affix, String.Single),
141
+ combined('fstringescape', 'tsqf')),
142
+ ('([fF])(")', bygroups(String.Affix, String.Double),
143
+ combined('fstringescape', 'dqf')),
144
+ ("([fF])(')", bygroups(String.Affix, String.Single),
145
+ combined('fstringescape', 'sqf')),
146
+ # raw strings
147
+ ('(?i)(rb|br|r)(""")',
148
+ bygroups(String.Affix, String.Double), 'tdqs'),
149
+ ("(?i)(rb|br|r)(''')",
150
+ bygroups(String.Affix, String.Single), 'tsqs'),
151
+ ('(?i)(rb|br|r)(")',
152
+ bygroups(String.Affix, String.Double), 'dqs'),
153
+ ("(?i)(rb|br|r)(')",
154
+ bygroups(String.Affix, String.Single), 'sqs'),
155
+ # non-raw strings
156
+ ('([uUbB]?)(""")', bygroups(String.Affix, String.Double),
157
+ combined('stringescape', 'tdqs')),
158
+ ("([uUbB]?)(''')", bygroups(String.Affix, String.Single),
159
+ combined('stringescape', 'tsqs')),
160
+ ('([uUbB]?)(")', bygroups(String.Affix, String.Double),
161
+ combined('stringescape', 'dqs')),
162
+ ("([uUbB]?)(')", bygroups(String.Affix, String.Single),
163
+ combined('stringescape', 'sqs')),
164
+ (r'[^\S\n]+', Text),
165
+ include('numbers'),
166
+ (r'!=|==|<<|>>|:=|[-~+/*%=<>&^|.]', Operator),
167
+ (r'[]{}:(),;[]', Punctuation),
168
+ (r'(in|is|and|or|not)\b', Operator.Word),
169
+ include('expr-keywords'),
170
+ include('builtins'),
171
+ include('magicfuncs'),
172
+ include('magicvars'),
173
+ include('name'),
174
+ ],
175
+ 'expr-inside-fstring': [
176
+ (r'[{([]', Punctuation, 'expr-inside-fstring-inner'),
177
+ # without format specifier
178
+ (r'(=\s*)?' # debug (https://bugs.python.org/issue36817)
179
+ r'(\![sraf])?' # conversion
180
+ r'\}', String.Interpol, '#pop'),
181
+ # with format specifier
182
+ # we'll catch the remaining '}' in the outer scope
183
+ (r'(=\s*)?' # debug (https://bugs.python.org/issue36817)
184
+ r'(\![sraf])?' # conversion
185
+ r':', String.Interpol, '#pop'),
186
+ (r'\s+', Text), # allow new lines
187
+ include('expr'),
188
+ ],
189
+ 'expr-inside-fstring-inner': [
190
+ (r'[{([]', Punctuation, 'expr-inside-fstring-inner'),
191
+ (r'[])}]', Punctuation, '#pop'),
192
+ (r'\s+', Text), # allow new lines
193
+ include('expr'),
194
+ ],
195
+ 'expr-keywords': [
196
+ # Based on https://docs.python.org/3/reference/expressions.html
197
+ (words((
198
+ 'async for', 'await', 'else', 'for', 'if', 'lambda',
199
+ 'yield', 'yield from'), suffix=r'\b'),
200
+ Keyword),
201
+ (words(('True', 'False', 'None'), suffix=r'\b'), Keyword.Constant),
202
+ ],
203
+ 'keywords': [
204
+ (words((
205
+ 'assert', 'async', 'await', 'break', 'continue', 'del', 'elif',
206
+ 'else', 'except', 'finally', 'for', 'global', 'if', 'lambda',
207
+ 'pass', 'raise', 'nonlocal', 'return', 'try', 'while', 'yield',
208
+ 'yield from', 'as', 'with'), suffix=r'\b'),
209
+ Keyword),
210
+ (words(('True', 'False', 'None'), suffix=r'\b'), Keyword.Constant),
211
+ ],
212
+ 'soft-keywords': [
213
+ # `match`, `case` and `_` soft keywords
214
+ (r'(^[ \t]*)' # at beginning of line + possible indentation
215
+ r'(match|case)\b' # a possible keyword
216
+ r'(?![ \t]*(?:' # not followed by...
217
+ r'[:,;=^&|@~)\]}]|(?:' + # characters and keywords that mean this isn't
218
+ r'|'.join(keyword.kwlist) + r')\b))', # pattern matching
219
+ bygroups(Text, Keyword), 'soft-keywords-inner'),
220
+ ],
221
+ 'soft-keywords-inner': [
222
+ # optional `_` keyword
223
+ (r'(\s+)([^\n_]*)(_\b)', bygroups(Text, using(this), Keyword)),
224
+ default('#pop')
225
+ ],
226
+ 'builtins': [
227
+ (words((
228
+ '__import__', 'abs', 'all', 'any', 'bin', 'bool', 'bytearray',
229
+ 'breakpoint', 'bytes', 'chr', 'classmethod', 'compile', 'complex',
230
+ 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'filter',
231
+ 'float', 'format', 'frozenset', 'getattr', 'globals', 'hasattr',
232
+ 'hash', 'hex', 'id', 'input', 'int', 'isinstance', 'issubclass',
233
+ 'iter', 'len', 'list', 'locals', 'map', 'max', 'memoryview',
234
+ 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'print',
235
+ 'property', 'range', 'repr', 'reversed', 'round', 'set', 'setattr',
236
+ 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple',
237
+ 'type', 'vars', 'zip'), prefix=r'(?<!\.)', suffix=r'\b'),
238
+ Name.Builtin),
239
+ (r'(?<!\.)(self|Ellipsis|NotImplemented|cls)\b', Name.Builtin.Pseudo),
240
+ (words((
241
+ 'ArithmeticError', 'AssertionError', 'AttributeError',
242
+ 'BaseException', 'BufferError', 'BytesWarning', 'DeprecationWarning',
243
+ 'EOFError', 'EnvironmentError', 'Exception', 'FloatingPointError',
244
+ 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError',
245
+ 'ImportWarning', 'IndentationError', 'IndexError', 'KeyError',
246
+ 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'NameError',
247
+ 'NotImplementedError', 'OSError', 'OverflowError',
248
+ 'PendingDeprecationWarning', 'ReferenceError', 'ResourceWarning',
249
+ 'RuntimeError', 'RuntimeWarning', 'StopIteration',
250
+ 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit',
251
+ 'TabError', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError',
252
+ 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError',
253
+ 'UnicodeWarning', 'UserWarning', 'ValueError', 'VMSError',
254
+ 'Warning', 'WindowsError', 'ZeroDivisionError',
255
+ # new builtin exceptions from PEP 3151
256
+ 'BlockingIOError', 'ChildProcessError', 'ConnectionError',
257
+ 'BrokenPipeError', 'ConnectionAbortedError', 'ConnectionRefusedError',
258
+ 'ConnectionResetError', 'FileExistsError', 'FileNotFoundError',
259
+ 'InterruptedError', 'IsADirectoryError', 'NotADirectoryError',
260
+ 'PermissionError', 'ProcessLookupError', 'TimeoutError',
261
+ # others new in Python 3
262
+ 'StopAsyncIteration', 'ModuleNotFoundError', 'RecursionError'),
263
+ prefix=r'(?<!\.)', suffix=r'\b'),
264
+ Name.Exception),
265
+ ],
266
+ 'magicfuncs': [
267
+ (words((
268
+ '__abs__', '__add__', '__aenter__', '__aexit__', '__aiter__',
269
+ '__and__', '__anext__', '__await__', '__bool__', '__bytes__',
270
+ '__call__', '__complex__', '__contains__', '__del__', '__delattr__',
271
+ '__delete__', '__delitem__', '__dir__', '__divmod__', '__enter__',
272
+ '__eq__', '__exit__', '__float__', '__floordiv__', '__format__',
273
+ '__ge__', '__get__', '__getattr__', '__getattribute__',
274
+ '__getitem__', '__gt__', '__hash__', '__iadd__', '__iand__',
275
+ '__ifloordiv__', '__ilshift__', '__imatmul__', '__imod__',
276
+ '__imul__', '__index__', '__init__', '__instancecheck__',
277
+ '__int__', '__invert__', '__ior__', '__ipow__', '__irshift__',
278
+ '__isub__', '__iter__', '__itruediv__', '__ixor__', '__le__',
279
+ '__len__', '__length_hint__', '__lshift__', '__lt__', '__matmul__',
280
+ '__missing__', '__mod__', '__mul__', '__ne__', '__neg__',
281
+ '__new__', '__next__', '__or__', '__pos__', '__pow__',
282
+ '__prepare__', '__radd__', '__rand__', '__rdivmod__', '__repr__',
283
+ '__reversed__', '__rfloordiv__', '__rlshift__', '__rmatmul__',
284
+ '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__',
285
+ '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__',
286
+ '__rxor__', '__set__', '__setattr__', '__setitem__', '__str__',
287
+ '__sub__', '__subclasscheck__', '__truediv__',
288
+ '__xor__'), suffix=r'\b'),
289
+ Name.Function.Magic),
290
+ ],
291
+ 'magicvars': [
292
+ (words((
293
+ '__annotations__', '__bases__', '__class__', '__closure__',
294
+ '__code__', '__defaults__', '__dict__', '__doc__', '__file__',
295
+ '__func__', '__globals__', '__kwdefaults__', '__module__',
296
+ '__mro__', '__name__', '__objclass__', '__qualname__',
297
+ '__self__', '__slots__', '__weakref__'), suffix=r'\b'),
298
+ Name.Variable.Magic),
299
+ ],
300
+ 'numbers': [
301
+ (r'(\d(?:_?\d)*\.(?:\d(?:_?\d)*)?|(?:\d(?:_?\d)*)?\.\d(?:_?\d)*)'
302
+ r'([eE][+-]?\d(?:_?\d)*)?', Number.Float),
303
+ (r'\d(?:_?\d)*[eE][+-]?\d(?:_?\d)*j?', Number.Float),
304
+ (r'0[oO](?:_?[0-7])+', Number.Oct),
305
+ (r'0[bB](?:_?[01])+', Number.Bin),
306
+ (r'0[xX](?:_?[a-fA-F0-9])+', Number.Hex),
307
+ (r'\d(?:_?\d)*', Number.Integer),
308
+ ],
309
+ 'name': [
310
+ (r'@' + uni_name, Name.Decorator),
311
+ (r'@', Operator), # new matrix multiplication operator
312
+ (uni_name, Name),
313
+ ],
314
+ 'funcname': [
315
+ include('magicfuncs'),
316
+ (uni_name, Name.Function, '#pop'),
317
+ default('#pop'),
318
+ ],
319
+ 'classname': [
320
+ (uni_name, Name.Class, '#pop'),
321
+ ],
322
+ 'import': [
323
+ (r'(\s+)(as)(\s+)', bygroups(Text, Keyword, Text)),
324
+ (r'\.', Name.Namespace),
325
+ (uni_name, Name.Namespace),
326
+ (r'(\s*)(,)(\s*)', bygroups(Text, Operator, Text)),
327
+ default('#pop') # all else: go back
328
+ ],
329
+ 'fromimport': [
330
+ (r'(\s+)(import)\b', bygroups(Text, Keyword.Namespace), '#pop'),
331
+ (r'\.', Name.Namespace),
332
+ # if None occurs here, it's "raise x from None", since None can
333
+ # never be a module name
334
+ (r'None\b', Name.Builtin.Pseudo, '#pop'),
335
+ (uni_name, Name.Namespace),
336
+ default('#pop'),
337
+ ],
338
+ 'rfstringescape': [
339
+ (r'\{\{', String.Escape),
340
+ (r'\}\}', String.Escape),
341
+ ],
342
+ 'fstringescape': [
343
+ include('rfstringescape'),
344
+ include('stringescape'),
345
+ ],
346
+ 'stringescape': [
347
+ (r'\\([\\abfnrtv"\']|\n|N\{.*?\}|u[a-fA-F0-9]{4}|'
348
+ r'U[a-fA-F0-9]{8}|x[a-fA-F0-9]{2}|[0-7]{1,3})', String.Escape)
349
+ ],
350
+ 'fstrings-single': fstring_rules(String.Single),
351
+ 'fstrings-double': fstring_rules(String.Double),
352
+ 'strings-single': innerstring_rules(String.Single),
353
+ 'strings-double': innerstring_rules(String.Double),
354
+ 'dqf': [
355
+ (r'"', String.Double, '#pop'),
356
+ (r'\\\\|\\"|\\\n', String.Escape), # included here for raw strings
357
+ include('fstrings-double')
358
+ ],
359
+ 'sqf': [
360
+ (r"'", String.Single, '#pop'),
361
+ (r"\\\\|\\'|\\\n", String.Escape), # included here for raw strings
362
+ include('fstrings-single')
363
+ ],
364
+ 'dqs': [
365
+ (r'"', String.Double, '#pop'),
366
+ (r'\\\\|\\"|\\\n', String.Escape), # included here for raw strings
367
+ include('strings-double')
368
+ ],
369
+ 'sqs': [
370
+ (r"'", String.Single, '#pop'),
371
+ (r"\\\\|\\'|\\\n", String.Escape), # included here for raw strings
372
+ include('strings-single')
373
+ ],
374
+ 'tdqf': [
375
+ (r'"""', String.Double, '#pop'),
376
+ include('fstrings-double'),
377
+ (r'\n', String.Double)
378
+ ],
379
+ 'tsqf': [
380
+ (r"'''", String.Single, '#pop'),
381
+ include('fstrings-single'),
382
+ (r'\n', String.Single)
383
+ ],
384
+ 'tdqs': [
385
+ (r'"""', String.Double, '#pop'),
386
+ include('strings-double'),
387
+ (r'\n', String.Double)
388
+ ],
389
+ 'tsqs': [
390
+ (r"'''", String.Single, '#pop'),
391
+ include('strings-single'),
392
+ (r'\n', String.Single)
393
+ ],
394
+ }
395
+
396
+ def analyse_text(text):
397
+ return shebang_matches(text, r'pythonw?(3(\.\d)?)?') or \
398
+ 'import ' in text[:1000]
399
+
400
+
401
+ Python3Lexer = PythonLexer
402
+
403
+
404
+ class Python2Lexer(RegexLexer):
405
+ """
406
+ For `Python 2.x <http://www.python.org>`_ source code.
407
+
408
+ .. versionchanged:: 2.5
409
+ This class has been renamed from ``PythonLexer``. ``PythonLexer`` now
410
+ refers to the Python 3 variant. File name patterns like ``*.py`` have
411
+ been moved to Python 3 as well.
412
+ """
413
+
414
+ name = 'Python 2.x'
415
+ aliases = ['python2', 'py2']
416
+ filenames = [] # now taken over by PythonLexer (3.x)
417
+ mimetypes = ['text/x-python2', 'application/x-python2']
418
+
419
+ def innerstring_rules(ttype):
420
+ return [
421
+ # the old style '%s' % (...) string formatting
422
+ (r'%(\(\w+\))?[-#0 +]*([0-9]+|[*])?(\.([0-9]+|[*]))?'
423
+ '[hlL]?[E-GXc-giorsux%]', String.Interpol),
424
+ # backslashes, quotes and formatting signs must be parsed one at a time
425
+ (r'[^\\\'"%\n]+', ttype),
426
+ (r'[\'"\\]', ttype),
427
+ # unhandled string formatting sign
428
+ (r'%', ttype),
429
+ # newlines are an error (use "nl" state)
430
+ ]
431
+
432
+ tokens = {
433
+ 'root': [
434
+ (r'\n', Text),
435
+ (r'^(\s*)([rRuUbB]{,2})("""(?:.|\n)*?""")',
436
+ bygroups(Text, String.Affix, String.Doc)),
437
+ (r"^(\s*)([rRuUbB]{,2})('''(?:.|\n)*?''')",
438
+ bygroups(Text, String.Affix, String.Doc)),
439
+ (r'[^\S\n]+', Text),
440
+ (r'\A#!.+$', Comment.Hashbang),
441
+ (r'#.*$', Comment.Single),
442
+ (r'[]{}:(),;[]', Punctuation),
443
+ (r'\\\n', Text),
444
+ (r'\\', Text),
445
+ (r'(in|is|and|or|not)\b', Operator.Word),
446
+ (r'!=|==|<<|>>|[-~+/*%=<>&^|.]', Operator),
447
+ include('keywords'),
448
+ (r'(def)((?:\s|\\\s)+)', bygroups(Keyword, Text), 'funcname'),
449
+ (r'(class)((?:\s|\\\s)+)', bygroups(Keyword, Text), 'classname'),
450
+ (r'(from)((?:\s|\\\s)+)', bygroups(Keyword.Namespace, Text),
451
+ 'fromimport'),
452
+ (r'(import)((?:\s|\\\s)+)', bygroups(Keyword.Namespace, Text),
453
+ 'import'),
454
+ include('builtins'),
455
+ include('magicfuncs'),
456
+ include('magicvars'),
457
+ include('backtick'),
458
+ ('([rR]|[uUbB][rR]|[rR][uUbB])(""")',
459
+ bygroups(String.Affix, String.Double), 'tdqs'),
460
+ ("([rR]|[uUbB][rR]|[rR][uUbB])(''')",
461
+ bygroups(String.Affix, String.Single), 'tsqs'),
462
+ ('([rR]|[uUbB][rR]|[rR][uUbB])(")',
463
+ bygroups(String.Affix, String.Double), 'dqs'),
464
+ ("([rR]|[uUbB][rR]|[rR][uUbB])(')",
465
+ bygroups(String.Affix, String.Single), 'sqs'),
466
+ ('([uUbB]?)(""")', bygroups(String.Affix, String.Double),
467
+ combined('stringescape', 'tdqs')),
468
+ ("([uUbB]?)(''')", bygroups(String.Affix, String.Single),
469
+ combined('stringescape', 'tsqs')),
470
+ ('([uUbB]?)(")', bygroups(String.Affix, String.Double),
471
+ combined('stringescape', 'dqs')),
472
+ ("([uUbB]?)(')", bygroups(String.Affix, String.Single),
473
+ combined('stringescape', 'sqs')),
474
+ include('name'),
475
+ include('numbers'),
476
+ ],
477
+ 'keywords': [
478
+ (words((
479
+ 'assert', 'break', 'continue', 'del', 'elif', 'else', 'except',
480
+ 'exec', 'finally', 'for', 'global', 'if', 'lambda', 'pass',
481
+ 'print', 'raise', 'return', 'try', 'while', 'yield',
482
+ 'yield from', 'as', 'with'), suffix=r'\b'),
483
+ Keyword),
484
+ ],
485
+ 'builtins': [
486
+ (words((
487
+ '__import__', 'abs', 'all', 'any', 'apply', 'basestring', 'bin',
488
+ 'bool', 'buffer', 'bytearray', 'bytes', 'callable', 'chr', 'classmethod',
489
+ 'cmp', 'coerce', 'compile', 'complex', 'delattr', 'dict', 'dir', 'divmod',
490
+ 'enumerate', 'eval', 'execfile', 'exit', 'file', 'filter', 'float',
491
+ 'frozenset', 'getattr', 'globals', 'hasattr', 'hash', 'hex', 'id',
492
+ 'input', 'int', 'intern', 'isinstance', 'issubclass', 'iter', 'len',
493
+ 'list', 'locals', 'long', 'map', 'max', 'min', 'next', 'object',
494
+ 'oct', 'open', 'ord', 'pow', 'property', 'range', 'raw_input', 'reduce',
495
+ 'reload', 'repr', 'reversed', 'round', 'set', 'setattr', 'slice',
496
+ 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type',
497
+ 'unichr', 'unicode', 'vars', 'xrange', 'zip'),
498
+ prefix=r'(?<!\.)', suffix=r'\b'),
499
+ Name.Builtin),
500
+ (r'(?<!\.)(self|None|Ellipsis|NotImplemented|False|True|cls'
501
+ r')\b', Name.Builtin.Pseudo),
502
+ (words((
503
+ 'ArithmeticError', 'AssertionError', 'AttributeError',
504
+ 'BaseException', 'DeprecationWarning', 'EOFError', 'EnvironmentError',
505
+ 'Exception', 'FloatingPointError', 'FutureWarning', 'GeneratorExit',
506
+ 'IOError', 'ImportError', 'ImportWarning', 'IndentationError',
507
+ 'IndexError', 'KeyError', 'KeyboardInterrupt', 'LookupError',
508
+ 'MemoryError', 'NameError',
509
+ 'NotImplementedError', 'OSError', 'OverflowError', 'OverflowWarning',
510
+ 'PendingDeprecationWarning', 'ReferenceError',
511
+ 'RuntimeError', 'RuntimeWarning', 'StandardError', 'StopIteration',
512
+ 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit',
513
+ 'TabError', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError',
514
+ 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError',
515
+ 'UnicodeWarning', 'UserWarning', 'ValueError', 'VMSError', 'Warning',
516
+ 'WindowsError', 'ZeroDivisionError'), prefix=r'(?<!\.)', suffix=r'\b'),
517
+ Name.Exception),
518
+ ],
519
+ 'magicfuncs': [
520
+ (words((
521
+ '__abs__', '__add__', '__and__', '__call__', '__cmp__', '__coerce__',
522
+ '__complex__', '__contains__', '__del__', '__delattr__', '__delete__',
523
+ '__delitem__', '__delslice__', '__div__', '__divmod__', '__enter__',
524
+ '__eq__', '__exit__', '__float__', '__floordiv__', '__ge__', '__get__',
525
+ '__getattr__', '__getattribute__', '__getitem__', '__getslice__', '__gt__',
526
+ '__hash__', '__hex__', '__iadd__', '__iand__', '__idiv__', '__ifloordiv__',
527
+ '__ilshift__', '__imod__', '__imul__', '__index__', '__init__',
528
+ '__instancecheck__', '__int__', '__invert__', '__iop__', '__ior__',
529
+ '__ipow__', '__irshift__', '__isub__', '__iter__', '__itruediv__',
530
+ '__ixor__', '__le__', '__len__', '__long__', '__lshift__', '__lt__',
531
+ '__missing__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__',
532
+ '__nonzero__', '__oct__', '__op__', '__or__', '__pos__', '__pow__',
533
+ '__radd__', '__rand__', '__rcmp__', '__rdiv__', '__rdivmod__', '__repr__',
534
+ '__reversed__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__',
535
+ '__rop__', '__ror__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__',
536
+ '__rtruediv__', '__rxor__', '__set__', '__setattr__', '__setitem__',
537
+ '__setslice__', '__str__', '__sub__', '__subclasscheck__', '__truediv__',
538
+ '__unicode__', '__xor__'), suffix=r'\b'),
539
+ Name.Function.Magic),
540
+ ],
541
+ 'magicvars': [
542
+ (words((
543
+ '__bases__', '__class__', '__closure__', '__code__', '__defaults__',
544
+ '__dict__', '__doc__', '__file__', '__func__', '__globals__',
545
+ '__metaclass__', '__module__', '__mro__', '__name__', '__self__',
546
+ '__slots__', '__weakref__'),
547
+ suffix=r'\b'),
548
+ Name.Variable.Magic),
549
+ ],
550
+ 'numbers': [
551
+ (r'(\d+\.\d*|\d*\.\d+)([eE][+-]?[0-9]+)?j?', Number.Float),
552
+ (r'\d+[eE][+-]?[0-9]+j?', Number.Float),
553
+ (r'0[0-7]+j?', Number.Oct),
554
+ (r'0[bB][01]+', Number.Bin),
555
+ (r'0[xX][a-fA-F0-9]+', Number.Hex),
556
+ (r'\d+L', Number.Integer.Long),
557
+ (r'\d+j?', Number.Integer)
558
+ ],
559
+ 'backtick': [
560
+ ('`.*?`', String.Backtick),
561
+ ],
562
+ 'name': [
563
+ (r'@[\w.]+', Name.Decorator),
564
+ (r'[a-zA-Z_]\w*', Name),
565
+ ],
566
+ 'funcname': [
567
+ include('magicfuncs'),
568
+ (r'[a-zA-Z_]\w*', Name.Function, '#pop'),
569
+ default('#pop'),
570
+ ],
571
+ 'classname': [
572
+ (r'[a-zA-Z_]\w*', Name.Class, '#pop')
573
+ ],
574
+ 'import': [
575
+ (r'(?:[ \t]|\\\n)+', Text),
576
+ (r'as\b', Keyword.Namespace),
577
+ (r',', Operator),
578
+ (r'[a-zA-Z_][\w.]*', Name.Namespace),
579
+ default('#pop') # all else: go back
580
+ ],
581
+ 'fromimport': [
582
+ (r'(?:[ \t]|\\\n)+', Text),
583
+ (r'import\b', Keyword.Namespace, '#pop'),
584
+ # if None occurs here, it's "raise x from None", since None can
585
+ # never be a module name
586
+ (r'None\b', Name.Builtin.Pseudo, '#pop'),
587
+ # sadly, in "raise x from y" y will be highlighted as namespace too
588
+ (r'[a-zA-Z_.][\w.]*', Name.Namespace),
589
+ # anything else here also means "raise x from y" and is therefore
590
+ # not an error
591
+ default('#pop'),
592
+ ],
593
+ 'stringescape': [
594
+ (r'\\([\\abfnrtv"\']|\n|N\{.*?\}|u[a-fA-F0-9]{4}|'
595
+ r'U[a-fA-F0-9]{8}|x[a-fA-F0-9]{2}|[0-7]{1,3})', String.Escape)
596
+ ],
597
+ 'strings-single': innerstring_rules(String.Single),
598
+ 'strings-double': innerstring_rules(String.Double),
599
+ 'dqs': [
600
+ (r'"', String.Double, '#pop'),
601
+ (r'\\\\|\\"|\\\n', String.Escape), # included here for raw strings
602
+ include('strings-double')
603
+ ],
604
+ 'sqs': [
605
+ (r"'", String.Single, '#pop'),
606
+ (r"\\\\|\\'|\\\n", String.Escape), # included here for raw strings
607
+ include('strings-single')
608
+ ],
609
+ 'tdqs': [
610
+ (r'"""', String.Double, '#pop'),
611
+ include('strings-double'),
612
+ (r'\n', String.Double)
613
+ ],
614
+ 'tsqs': [
615
+ (r"'''", String.Single, '#pop'),
616
+ include('strings-single'),
617
+ (r'\n', String.Single)
618
+ ],
619
+ }
620
+
621
+ def analyse_text(text):
622
+ return shebang_matches(text, r'pythonw?2(\.\d)?')
623
+
624
+
625
+ class PythonConsoleLexer(Lexer):
626
+ """
627
+ For Python console output or doctests, such as:
628
+
629
+ .. sourcecode:: pycon
630
+
631
+ >>> a = 'foo'
632
+ >>> print a
633
+ foo
634
+ >>> 1 / 0
635
+ Traceback (most recent call last):
636
+ File "<stdin>", line 1, in <module>
637
+ ZeroDivisionError: integer division or modulo by zero
638
+
639
+ Additional options:
640
+
641
+ `python3`
642
+ Use Python 3 lexer for code. Default is ``True``.
643
+
644
+ .. versionadded:: 1.0
645
+ .. versionchanged:: 2.5
646
+ Now defaults to ``True``.
647
+ """
648
+ name = 'Python console session'
649
+ aliases = ['pycon']
650
+ mimetypes = ['text/x-python-doctest']
651
+
652
+ def __init__(self, **options):
653
+ self.python3 = get_bool_opt(options, 'python3', True)
654
+ Lexer.__init__(self, **options)
655
+
656
+ def get_tokens_unprocessed(self, text):
657
+ if self.python3:
658
+ pylexer = PythonLexer(**self.options)
659
+ tblexer = PythonTracebackLexer(**self.options)
660
+ else:
661
+ pylexer = Python2Lexer(**self.options)
662
+ tblexer = Python2TracebackLexer(**self.options)
663
+
664
+ curcode = ''
665
+ insertions = []
666
+ curtb = ''
667
+ tbindex = 0
668
+ tb = 0
669
+ for match in line_re.finditer(text):
670
+ line = match.group()
671
+ if line.startswith('>>> ') or line.startswith('... '):
672
+ tb = 0
673
+ insertions.append((len(curcode),
674
+ [(0, Generic.Prompt, line[:4])]))
675
+ curcode += line[4:]
676
+ elif line.rstrip() == '...' and not tb:
677
+ # only a new >>> prompt can end an exception block
678
+ # otherwise an ellipsis in place of the traceback frames
679
+ # will be mishandled
680
+ insertions.append((len(curcode),
681
+ [(0, Generic.Prompt, '...')]))
682
+ curcode += line[3:]
683
+ else:
684
+ if curcode:
685
+ yield from do_insertions(
686
+ insertions, pylexer.get_tokens_unprocessed(curcode))
687
+ curcode = ''
688
+ insertions = []
689
+ if (line.startswith('Traceback (most recent call last):') or
690
+ re.match(' File "[^"]+", line \\d+\\n$', line)):
691
+ tb = 1
692
+ curtb = line
693
+ tbindex = match.start()
694
+ elif line == 'KeyboardInterrupt\n':
695
+ yield match.start(), Name.Class, line
696
+ elif tb:
697
+ curtb += line
698
+ if not (line.startswith(' ') or line.strip() == '...'):
699
+ tb = 0
700
+ for i, t, v in tblexer.get_tokens_unprocessed(curtb):
701
+ yield tbindex+i, t, v
702
+ curtb = ''
703
+ else:
704
+ yield match.start(), Generic.Output, line
705
+ if curcode:
706
+ yield from do_insertions(insertions,
707
+ pylexer.get_tokens_unprocessed(curcode))
708
+ if curtb:
709
+ for i, t, v in tblexer.get_tokens_unprocessed(curtb):
710
+ yield tbindex+i, t, v
711
+
712
+
713
+ class PythonTracebackLexer(RegexLexer):
714
+ """
715
+ For Python 3.x tracebacks, with support for chained exceptions.
716
+
717
+ .. versionadded:: 1.0
718
+
719
+ .. versionchanged:: 2.5
720
+ This is now the default ``PythonTracebackLexer``. It is still available
721
+ as the alias ``Python3TracebackLexer``.
722
+ """
723
+
724
+ name = 'Python Traceback'
725
+ aliases = ['pytb', 'py3tb']
726
+ filenames = ['*.pytb', '*.py3tb']
727
+ mimetypes = ['text/x-python-traceback', 'text/x-python3-traceback']
728
+
729
+ tokens = {
730
+ 'root': [
731
+ (r'\n', Text),
732
+ (r'^Traceback \(most recent call last\):\n', Generic.Traceback, 'intb'),
733
+ (r'^During handling of the above exception, another '
734
+ r'exception occurred:\n\n', Generic.Traceback),
735
+ (r'^The above exception was the direct cause of the '
736
+ r'following exception:\n\n', Generic.Traceback),
737
+ (r'^(?= File "[^"]+", line \d+)', Generic.Traceback, 'intb'),
738
+ (r'^.*\n', Other),
739
+ ],
740
+ 'intb': [
741
+ (r'^( File )("[^"]+")(, line )(\d+)(, in )(.+)(\n)',
742
+ bygroups(Text, Name.Builtin, Text, Number, Text, Name, Text)),
743
+ (r'^( File )("[^"]+")(, line )(\d+)(\n)',
744
+ bygroups(Text, Name.Builtin, Text, Number, Text)),
745
+ (r'^( )(.+)(\n)',
746
+ bygroups(Text, using(PythonLexer), Text), 'markers'),
747
+ (r'^([ \t]*)(\.\.\.)(\n)',
748
+ bygroups(Text, Comment, Text)), # for doctests...
749
+ (r'^([^:]+)(: )(.+)(\n)',
750
+ bygroups(Generic.Error, Text, Name, Text), '#pop'),
751
+ (r'^([a-zA-Z_][\w.]*)(:?\n)',
752
+ bygroups(Generic.Error, Text), '#pop')
753
+ ],
754
+ 'markers': [
755
+ # Either `PEP 657 <https://www.python.org/dev/peps/pep-0657/>`
756
+ # error locations in Python 3.11+, or single-caret markers
757
+ # for syntax errors before that.
758
+ (r'^( {4,})([~^]+)(\n)',
759
+ bygroups(Text, Punctuation.Marker, Text),
760
+ '#pop'),
761
+ default('#pop'),
762
+ ],
763
+ }
764
+
765
+
766
+ Python3TracebackLexer = PythonTracebackLexer
767
+
768
+
769
+ class Python2TracebackLexer(RegexLexer):
770
+ """
771
+ For Python tracebacks.
772
+
773
+ .. versionadded:: 0.7
774
+
775
+ .. versionchanged:: 2.5
776
+ This class has been renamed from ``PythonTracebackLexer``.
777
+ ``PythonTracebackLexer`` now refers to the Python 3 variant.
778
+ """
779
+
780
+ name = 'Python 2.x Traceback'
781
+ aliases = ['py2tb']
782
+ filenames = ['*.py2tb']
783
+ mimetypes = ['text/x-python2-traceback']
784
+
785
+ tokens = {
786
+ 'root': [
787
+ # Cover both (most recent call last) and (innermost last)
788
+ # The optional ^C allows us to catch keyboard interrupt signals.
789
+ (r'^(\^C)?(Traceback.*\n)',
790
+ bygroups(Text, Generic.Traceback), 'intb'),
791
+ # SyntaxError starts with this.
792
+ (r'^(?= File "[^"]+", line \d+)', Generic.Traceback, 'intb'),
793
+ (r'^.*\n', Other),
794
+ ],
795
+ 'intb': [
796
+ (r'^( File )("[^"]+")(, line )(\d+)(, in )(.+)(\n)',
797
+ bygroups(Text, Name.Builtin, Text, Number, Text, Name, Text)),
798
+ (r'^( File )("[^"]+")(, line )(\d+)(\n)',
799
+ bygroups(Text, Name.Builtin, Text, Number, Text)),
800
+ (r'^( )(.+)(\n)',
801
+ bygroups(Text, using(Python2Lexer), Text), 'marker'),
802
+ (r'^([ \t]*)(\.\.\.)(\n)',
803
+ bygroups(Text, Comment, Text)), # for doctests...
804
+ (r'^([^:]+)(: )(.+)(\n)',
805
+ bygroups(Generic.Error, Text, Name, Text), '#pop'),
806
+ (r'^([a-zA-Z_]\w*)(:?\n)',
807
+ bygroups(Generic.Error, Text), '#pop')
808
+ ],
809
+ 'marker': [
810
+ # For syntax errors.
811
+ (r'( {4,})(\^)', bygroups(Text, Punctuation.Marker), '#pop'),
812
+ default('#pop'),
813
+ ],
814
+ }
815
+
816
+
817
+ class CythonLexer(RegexLexer):
818
+ """
819
+ For Pyrex and `Cython <http://cython.org>`_ source code.
820
+
821
+ .. versionadded:: 1.1
822
+ """
823
+
824
+ name = 'Cython'
825
+ aliases = ['cython', 'pyx', 'pyrex']
826
+ filenames = ['*.pyx', '*.pxd', '*.pxi']
827
+ mimetypes = ['text/x-cython', 'application/x-cython']
828
+
829
+ tokens = {
830
+ 'root': [
831
+ (r'\n', Text),
832
+ (r'^(\s*)("""(?:.|\n)*?""")', bygroups(Text, String.Doc)),
833
+ (r"^(\s*)('''(?:.|\n)*?''')", bygroups(Text, String.Doc)),
834
+ (r'[^\S\n]+', Text),
835
+ (r'#.*$', Comment),
836
+ (r'[]{}:(),;[]', Punctuation),
837
+ (r'\\\n', Text),
838
+ (r'\\', Text),
839
+ (r'(in|is|and|or|not)\b', Operator.Word),
840
+ (r'(<)([a-zA-Z0-9.?]+)(>)',
841
+ bygroups(Punctuation, Keyword.Type, Punctuation)),
842
+ (r'!=|==|<<|>>|[-~+/*%=<>&^|.?]', Operator),
843
+ (r'(from)(\d+)(<=)(\s+)(<)(\d+)(:)',
844
+ bygroups(Keyword, Number.Integer, Operator, Name, Operator,
845
+ Name, Punctuation)),
846
+ include('keywords'),
847
+ (r'(def|property)(\s+)', bygroups(Keyword, Text), 'funcname'),
848
+ (r'(cp?def)(\s+)', bygroups(Keyword, Text), 'cdef'),
849
+ # (should actually start a block with only cdefs)
850
+ (r'(cdef)(:)', bygroups(Keyword, Punctuation)),
851
+ (r'(class|struct)(\s+)', bygroups(Keyword, Text), 'classname'),
852
+ (r'(from)(\s+)', bygroups(Keyword, Text), 'fromimport'),
853
+ (r'(c?import)(\s+)', bygroups(Keyword, Text), 'import'),
854
+ include('builtins'),
855
+ include('backtick'),
856
+ ('(?:[rR]|[uU][rR]|[rR][uU])"""', String, 'tdqs'),
857
+ ("(?:[rR]|[uU][rR]|[rR][uU])'''", String, 'tsqs'),
858
+ ('(?:[rR]|[uU][rR]|[rR][uU])"', String, 'dqs'),
859
+ ("(?:[rR]|[uU][rR]|[rR][uU])'", String, 'sqs'),
860
+ ('[uU]?"""', String, combined('stringescape', 'tdqs')),
861
+ ("[uU]?'''", String, combined('stringescape', 'tsqs')),
862
+ ('[uU]?"', String, combined('stringescape', 'dqs')),
863
+ ("[uU]?'", String, combined('stringescape', 'sqs')),
864
+ include('name'),
865
+ include('numbers'),
866
+ ],
867
+ 'keywords': [
868
+ (words((
869
+ 'assert', 'async', 'await', 'break', 'by', 'continue', 'ctypedef', 'del', 'elif',
870
+ 'else', 'except', 'except?', 'exec', 'finally', 'for', 'fused', 'gil',
871
+ 'global', 'if', 'include', 'lambda', 'nogil', 'pass', 'print',
872
+ 'raise', 'return', 'try', 'while', 'yield', 'as', 'with'), suffix=r'\b'),
873
+ Keyword),
874
+ (r'(DEF|IF|ELIF|ELSE)\b', Comment.Preproc),
875
+ ],
876
+ 'builtins': [
877
+ (words((
878
+ '__import__', 'abs', 'all', 'any', 'apply', 'basestring', 'bin', 'bint',
879
+ 'bool', 'buffer', 'bytearray', 'bytes', 'callable', 'chr',
880
+ 'classmethod', 'cmp', 'coerce', 'compile', 'complex', 'delattr',
881
+ 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'execfile', 'exit',
882
+ 'file', 'filter', 'float', 'frozenset', 'getattr', 'globals',
883
+ 'hasattr', 'hash', 'hex', 'id', 'input', 'int', 'intern', 'isinstance',
884
+ 'issubclass', 'iter', 'len', 'list', 'locals', 'long', 'map', 'max',
885
+ 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'property', 'Py_ssize_t',
886
+ 'range', 'raw_input', 'reduce', 'reload', 'repr', 'reversed',
887
+ 'round', 'set', 'setattr', 'slice', 'sorted', 'staticmethod',
888
+ 'str', 'sum', 'super', 'tuple', 'type', 'unichr', 'unicode', 'unsigned',
889
+ 'vars', 'xrange', 'zip'), prefix=r'(?<!\.)', suffix=r'\b'),
890
+ Name.Builtin),
891
+ (r'(?<!\.)(self|None|Ellipsis|NotImplemented|False|True|NULL'
892
+ r')\b', Name.Builtin.Pseudo),
893
+ (words((
894
+ 'ArithmeticError', 'AssertionError', 'AttributeError',
895
+ 'BaseException', 'DeprecationWarning', 'EOFError', 'EnvironmentError',
896
+ 'Exception', 'FloatingPointError', 'FutureWarning', 'GeneratorExit',
897
+ 'IOError', 'ImportError', 'ImportWarning', 'IndentationError',
898
+ 'IndexError', 'KeyError', 'KeyboardInterrupt', 'LookupError',
899
+ 'MemoryError', 'NameError', 'NotImplemented', 'NotImplementedError',
900
+ 'OSError', 'OverflowError', 'OverflowWarning',
901
+ 'PendingDeprecationWarning', 'ReferenceError', 'RuntimeError',
902
+ 'RuntimeWarning', 'StandardError', 'StopIteration', 'SyntaxError',
903
+ 'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError',
904
+ 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError',
905
+ 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError',
906
+ 'UnicodeWarning', 'UserWarning', 'ValueError', 'Warning',
907
+ 'ZeroDivisionError'), prefix=r'(?<!\.)', suffix=r'\b'),
908
+ Name.Exception),
909
+ ],
910
+ 'numbers': [
911
+ (r'(\d+\.?\d*|\d*\.\d+)([eE][+-]?[0-9]+)?', Number.Float),
912
+ (r'0\d+', Number.Oct),
913
+ (r'0[xX][a-fA-F0-9]+', Number.Hex),
914
+ (r'\d+L', Number.Integer.Long),
915
+ (r'\d+', Number.Integer)
916
+ ],
917
+ 'backtick': [
918
+ ('`.*?`', String.Backtick),
919
+ ],
920
+ 'name': [
921
+ (r'@\w+', Name.Decorator),
922
+ (r'[a-zA-Z_]\w*', Name),
923
+ ],
924
+ 'funcname': [
925
+ (r'[a-zA-Z_]\w*', Name.Function, '#pop')
926
+ ],
927
+ 'cdef': [
928
+ (r'(public|readonly|extern|api|inline)\b', Keyword.Reserved),
929
+ (r'(struct|enum|union|class)\b', Keyword),
930
+ (r'([a-zA-Z_]\w*)(\s*)(?=[(:#=]|$)',
931
+ bygroups(Name.Function, Text), '#pop'),
932
+ (r'([a-zA-Z_]\w*)(\s*)(,)',
933
+ bygroups(Name.Function, Text, Punctuation)),
934
+ (r'from\b', Keyword, '#pop'),
935
+ (r'as\b', Keyword),
936
+ (r':', Punctuation, '#pop'),
937
+ (r'(?=["\'])', Text, '#pop'),
938
+ (r'[a-zA-Z_]\w*', Keyword.Type),
939
+ (r'.', Text),
940
+ ],
941
+ 'classname': [
942
+ (r'[a-zA-Z_]\w*', Name.Class, '#pop')
943
+ ],
944
+ 'import': [
945
+ (r'(\s+)(as)(\s+)', bygroups(Text, Keyword, Text)),
946
+ (r'[a-zA-Z_][\w.]*', Name.Namespace),
947
+ (r'(\s*)(,)(\s*)', bygroups(Text, Operator, Text)),
948
+ default('#pop') # all else: go back
949
+ ],
950
+ 'fromimport': [
951
+ (r'(\s+)(c?import)\b', bygroups(Text, Keyword), '#pop'),
952
+ (r'[a-zA-Z_.][\w.]*', Name.Namespace),
953
+ # ``cdef foo from "header"``, or ``for foo from 0 < i < 10``
954
+ default('#pop'),
955
+ ],
956
+ 'stringescape': [
957
+ (r'\\([\\abfnrtv"\']|\n|N\{.*?\}|u[a-fA-F0-9]{4}|'
958
+ r'U[a-fA-F0-9]{8}|x[a-fA-F0-9]{2}|[0-7]{1,3})', String.Escape)
959
+ ],
960
+ 'strings': [
961
+ (r'%(\([a-zA-Z0-9]+\))?[-#0 +]*([0-9]+|[*])?(\.([0-9]+|[*]))?'
962
+ '[hlL]?[E-GXc-giorsux%]', String.Interpol),
963
+ (r'[^\\\'"%\n]+', String),
964
+ # quotes, percents and backslashes must be parsed one at a time
965
+ (r'[\'"\\]', String),
966
+ # unhandled string formatting sign
967
+ (r'%', String)
968
+ # newlines are an error (use "nl" state)
969
+ ],
970
+ 'nl': [
971
+ (r'\n', String)
972
+ ],
973
+ 'dqs': [
974
+ (r'"', String, '#pop'),
975
+ (r'\\\\|\\"|\\\n', String.Escape), # included here again for raw strings
976
+ include('strings')
977
+ ],
978
+ 'sqs': [
979
+ (r"'", String, '#pop'),
980
+ (r"\\\\|\\'|\\\n", String.Escape), # included here again for raw strings
981
+ include('strings')
982
+ ],
983
+ 'tdqs': [
984
+ (r'"""', String, '#pop'),
985
+ include('strings'),
986
+ include('nl')
987
+ ],
988
+ 'tsqs': [
989
+ (r"'''", String, '#pop'),
990
+ include('strings'),
991
+ include('nl')
992
+ ],
993
+ }
994
+
995
+
996
+ class DgLexer(RegexLexer):
997
+ """
998
+ Lexer for `dg <http://pyos.github.com/dg>`_,
999
+ a functional and object-oriented programming language
1000
+ running on the CPython 3 VM.
1001
+
1002
+ .. versionadded:: 1.6
1003
+ """
1004
+ name = 'dg'
1005
+ aliases = ['dg']
1006
+ filenames = ['*.dg']
1007
+ mimetypes = ['text/x-dg']
1008
+
1009
+ tokens = {
1010
+ 'root': [
1011
+ (r'\s+', Text),
1012
+ (r'#.*?$', Comment.Single),
1013
+
1014
+ (r'(?i)0b[01]+', Number.Bin),
1015
+ (r'(?i)0o[0-7]+', Number.Oct),
1016
+ (r'(?i)0x[0-9a-f]+', Number.Hex),
1017
+ (r'(?i)[+-]?[0-9]+\.[0-9]+(e[+-]?[0-9]+)?j?', Number.Float),
1018
+ (r'(?i)[+-]?[0-9]+e[+-]?\d+j?', Number.Float),
1019
+ (r'(?i)[+-]?[0-9]+j?', Number.Integer),
1020
+
1021
+ (r"(?i)(br|r?b?)'''", String, combined('stringescape', 'tsqs', 'string')),
1022
+ (r'(?i)(br|r?b?)"""', String, combined('stringescape', 'tdqs', 'string')),
1023
+ (r"(?i)(br|r?b?)'", String, combined('stringescape', 'sqs', 'string')),
1024
+ (r'(?i)(br|r?b?)"', String, combined('stringescape', 'dqs', 'string')),
1025
+
1026
+ (r"`\w+'*`", Operator),
1027
+ (r'\b(and|in|is|or|where)\b', Operator.Word),
1028
+ (r'[!$%&*+\-./:<-@\\^|~;,]+', Operator),
1029
+
1030
+ (words((
1031
+ 'bool', 'bytearray', 'bytes', 'classmethod', 'complex', 'dict', 'dict\'',
1032
+ 'float', 'frozenset', 'int', 'list', 'list\'', 'memoryview', 'object',
1033
+ 'property', 'range', 'set', 'set\'', 'slice', 'staticmethod', 'str',
1034
+ 'super', 'tuple', 'tuple\'', 'type'),
1035
+ prefix=r'(?<!\.)', suffix=r'(?![\'\w])'),
1036
+ Name.Builtin),
1037
+ (words((
1038
+ '__import__', 'abs', 'all', 'any', 'bin', 'bind', 'chr', 'cmp', 'compile',
1039
+ 'complex', 'delattr', 'dir', 'divmod', 'drop', 'dropwhile', 'enumerate',
1040
+ 'eval', 'exhaust', 'filter', 'flip', 'foldl1?', 'format', 'fst',
1041
+ 'getattr', 'globals', 'hasattr', 'hash', 'head', 'hex', 'id', 'init',
1042
+ 'input', 'isinstance', 'issubclass', 'iter', 'iterate', 'last', 'len',
1043
+ 'locals', 'map', 'max', 'min', 'next', 'oct', 'open', 'ord', 'pow',
1044
+ 'print', 'repr', 'reversed', 'round', 'setattr', 'scanl1?', 'snd',
1045
+ 'sorted', 'sum', 'tail', 'take', 'takewhile', 'vars', 'zip'),
1046
+ prefix=r'(?<!\.)', suffix=r'(?![\'\w])'),
1047
+ Name.Builtin),
1048
+ (r"(?<!\.)(self|Ellipsis|NotImplemented|None|True|False)(?!['\w])",
1049
+ Name.Builtin.Pseudo),
1050
+
1051
+ (r"(?<!\.)[A-Z]\w*(Error|Exception|Warning)'*(?!['\w])",
1052
+ Name.Exception),
1053
+ (r"(?<!\.)(Exception|GeneratorExit|KeyboardInterrupt|StopIteration|"
1054
+ r"SystemExit)(?!['\w])", Name.Exception),
1055
+
1056
+ (r"(?<![\w.])(except|finally|for|if|import|not|otherwise|raise|"
1057
+ r"subclass|while|with|yield)(?!['\w])", Keyword.Reserved),
1058
+
1059
+ (r"[A-Z_]+'*(?!['\w])", Name),
1060
+ (r"[A-Z]\w+'*(?!['\w])", Keyword.Type),
1061
+ (r"\w+'*", Name),
1062
+
1063
+ (r'[()]', Punctuation),
1064
+ (r'.', Error),
1065
+ ],
1066
+ 'stringescape': [
1067
+ (r'\\([\\abfnrtv"\']|\n|N\{.*?\}|u[a-fA-F0-9]{4}|'
1068
+ r'U[a-fA-F0-9]{8}|x[a-fA-F0-9]{2}|[0-7]{1,3})', String.Escape)
1069
+ ],
1070
+ 'string': [
1071
+ (r'%(\(\w+\))?[-#0 +]*([0-9]+|[*])?(\.([0-9]+|[*]))?'
1072
+ '[hlL]?[E-GXc-giorsux%]', String.Interpol),
1073
+ (r'[^\\\'"%\n]+', String),
1074
+ # quotes, percents and backslashes must be parsed one at a time
1075
+ (r'[\'"\\]', String),
1076
+ # unhandled string formatting sign
1077
+ (r'%', String),
1078
+ (r'\n', String)
1079
+ ],
1080
+ 'dqs': [
1081
+ (r'"', String, '#pop')
1082
+ ],
1083
+ 'sqs': [
1084
+ (r"'", String, '#pop')
1085
+ ],
1086
+ 'tdqs': [
1087
+ (r'"""', String, '#pop')
1088
+ ],
1089
+ 'tsqs': [
1090
+ (r"'''", String, '#pop')
1091
+ ],
1092
+ }
1093
+
1094
+
1095
+ class NumPyLexer(PythonLexer):
1096
+ """
1097
+ A Python lexer recognizing Numerical Python builtins.
1098
+
1099
+ .. versionadded:: 0.10
1100
+ """
1101
+
1102
+ name = 'NumPy'
1103
+ aliases = ['numpy']
1104
+
1105
+ # override the mimetypes to not inherit them from python
1106
+ mimetypes = []
1107
+ filenames = []
1108
+
1109
+ EXTRA_KEYWORDS = {
1110
+ 'abs', 'absolute', 'accumulate', 'add', 'alen', 'all', 'allclose',
1111
+ 'alltrue', 'alterdot', 'amax', 'amin', 'angle', 'any', 'append',
1112
+ 'apply_along_axis', 'apply_over_axes', 'arange', 'arccos', 'arccosh',
1113
+ 'arcsin', 'arcsinh', 'arctan', 'arctan2', 'arctanh', 'argmax', 'argmin',
1114
+ 'argsort', 'argwhere', 'around', 'array', 'array2string', 'array_equal',
1115
+ 'array_equiv', 'array_repr', 'array_split', 'array_str', 'arrayrange',
1116
+ 'asanyarray', 'asarray', 'asarray_chkfinite', 'ascontiguousarray',
1117
+ 'asfarray', 'asfortranarray', 'asmatrix', 'asscalar', 'astype',
1118
+ 'atleast_1d', 'atleast_2d', 'atleast_3d', 'average', 'bartlett',
1119
+ 'base_repr', 'beta', 'binary_repr', 'bincount', 'binomial',
1120
+ 'bitwise_and', 'bitwise_not', 'bitwise_or', 'bitwise_xor', 'blackman',
1121
+ 'bmat', 'broadcast', 'byte_bounds', 'bytes', 'byteswap', 'c_',
1122
+ 'can_cast', 'ceil', 'choose', 'clip', 'column_stack', 'common_type',
1123
+ 'compare_chararrays', 'compress', 'concatenate', 'conj', 'conjugate',
1124
+ 'convolve', 'copy', 'corrcoef', 'correlate', 'cos', 'cosh', 'cov',
1125
+ 'cross', 'cumprod', 'cumproduct', 'cumsum', 'delete', 'deprecate',
1126
+ 'diag', 'diagflat', 'diagonal', 'diff', 'digitize', 'disp', 'divide',
1127
+ 'dot', 'dsplit', 'dstack', 'dtype', 'dump', 'dumps', 'ediff1d', 'empty',
1128
+ 'empty_like', 'equal', 'exp', 'expand_dims', 'expm1', 'extract', 'eye',
1129
+ 'fabs', 'fastCopyAndTranspose', 'fft', 'fftfreq', 'fftshift', 'fill',
1130
+ 'finfo', 'fix', 'flat', 'flatnonzero', 'flatten', 'fliplr', 'flipud',
1131
+ 'floor', 'floor_divide', 'fmod', 'frexp', 'fromarrays', 'frombuffer',
1132
+ 'fromfile', 'fromfunction', 'fromiter', 'frompyfunc', 'fromstring',
1133
+ 'generic', 'get_array_wrap', 'get_include', 'get_numarray_include',
1134
+ 'get_numpy_include', 'get_printoptions', 'getbuffer', 'getbufsize',
1135
+ 'geterr', 'geterrcall', 'geterrobj', 'getfield', 'gradient', 'greater',
1136
+ 'greater_equal', 'gumbel', 'hamming', 'hanning', 'histogram',
1137
+ 'histogram2d', 'histogramdd', 'hsplit', 'hstack', 'hypot', 'i0',
1138
+ 'identity', 'ifft', 'imag', 'index_exp', 'indices', 'inf', 'info',
1139
+ 'inner', 'insert', 'int_asbuffer', 'interp', 'intersect1d',
1140
+ 'intersect1d_nu', 'inv', 'invert', 'iscomplex', 'iscomplexobj',
1141
+ 'isfinite', 'isfortran', 'isinf', 'isnan', 'isneginf', 'isposinf',
1142
+ 'isreal', 'isrealobj', 'isscalar', 'issctype', 'issubclass_',
1143
+ 'issubdtype', 'issubsctype', 'item', 'itemset', 'iterable', 'ix_',
1144
+ 'kaiser', 'kron', 'ldexp', 'left_shift', 'less', 'less_equal', 'lexsort',
1145
+ 'linspace', 'load', 'loads', 'loadtxt', 'log', 'log10', 'log1p', 'log2',
1146
+ 'logical_and', 'logical_not', 'logical_or', 'logical_xor', 'logspace',
1147
+ 'lstsq', 'mat', 'matrix', 'max', 'maximum', 'maximum_sctype',
1148
+ 'may_share_memory', 'mean', 'median', 'meshgrid', 'mgrid', 'min',
1149
+ 'minimum', 'mintypecode', 'mod', 'modf', 'msort', 'multiply', 'nan',
1150
+ 'nan_to_num', 'nanargmax', 'nanargmin', 'nanmax', 'nanmin', 'nansum',
1151
+ 'ndenumerate', 'ndim', 'ndindex', 'negative', 'newaxis', 'newbuffer',
1152
+ 'newbyteorder', 'nonzero', 'not_equal', 'obj2sctype', 'ogrid', 'ones',
1153
+ 'ones_like', 'outer', 'permutation', 'piecewise', 'pinv', 'pkgload',
1154
+ 'place', 'poisson', 'poly', 'poly1d', 'polyadd', 'polyder', 'polydiv',
1155
+ 'polyfit', 'polyint', 'polymul', 'polysub', 'polyval', 'power', 'prod',
1156
+ 'product', 'ptp', 'put', 'putmask', 'r_', 'randint', 'random_integers',
1157
+ 'random_sample', 'ranf', 'rank', 'ravel', 'real', 'real_if_close',
1158
+ 'recarray', 'reciprocal', 'reduce', 'remainder', 'repeat', 'require',
1159
+ 'reshape', 'resize', 'restoredot', 'right_shift', 'rint', 'roll',
1160
+ 'rollaxis', 'roots', 'rot90', 'round', 'round_', 'row_stack', 's_',
1161
+ 'sample', 'savetxt', 'sctype2char', 'searchsorted', 'seed', 'select',
1162
+ 'set_numeric_ops', 'set_printoptions', 'set_string_function',
1163
+ 'setbufsize', 'setdiff1d', 'seterr', 'seterrcall', 'seterrobj',
1164
+ 'setfield', 'setflags', 'setmember1d', 'setxor1d', 'shape',
1165
+ 'show_config', 'shuffle', 'sign', 'signbit', 'sin', 'sinc', 'sinh',
1166
+ 'size', 'slice', 'solve', 'sometrue', 'sort', 'sort_complex', 'source',
1167
+ 'split', 'sqrt', 'square', 'squeeze', 'standard_normal', 'std',
1168
+ 'subtract', 'sum', 'svd', 'swapaxes', 'take', 'tan', 'tanh', 'tensordot',
1169
+ 'test', 'tile', 'tofile', 'tolist', 'tostring', 'trace', 'transpose',
1170
+ 'trapz', 'tri', 'tril', 'trim_zeros', 'triu', 'true_divide', 'typeDict',
1171
+ 'typename', 'uniform', 'union1d', 'unique', 'unique1d', 'unravel_index',
1172
+ 'unwrap', 'vander', 'var', 'vdot', 'vectorize', 'view', 'vonmises',
1173
+ 'vsplit', 'vstack', 'weibull', 'where', 'who', 'zeros', 'zeros_like'
1174
+ }
1175
+
1176
+ def get_tokens_unprocessed(self, text):
1177
+ for index, token, value in \
1178
+ PythonLexer.get_tokens_unprocessed(self, text):
1179
+ if token is Name and value in self.EXTRA_KEYWORDS:
1180
+ yield index, Keyword.Pseudo, value
1181
+ else:
1182
+ yield index, token, value
1183
+
1184
+ def analyse_text(text):
1185
+ ltext = text[:1000]
1186
+ return (shebang_matches(text, r'pythonw?(3(\.\d)?)?') or
1187
+ 'import ' in ltext) \
1188
+ and ('import numpy' in ltext or 'from numpy import' in ltext)
venv/lib/python3.10/site-packages/pip/_vendor/pygments/styles/__init__.py ADDED
@@ -0,0 +1,93 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.styles
3
+ ~~~~~~~~~~~~~~~
4
+
5
+ Contains built-in styles.
6
+
7
+ :copyright: Copyright 2006-2021 by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ from pip._vendor.pygments.plugin import find_plugin_styles
12
+ from pip._vendor.pygments.util import ClassNotFound
13
+
14
+
15
+ #: Maps style names to 'submodule::classname'.
16
+ STYLE_MAP = {
17
+ 'default': 'default::DefaultStyle',
18
+ 'emacs': 'emacs::EmacsStyle',
19
+ 'friendly': 'friendly::FriendlyStyle',
20
+ 'friendly_grayscale': 'friendly_grayscale::FriendlyGrayscaleStyle',
21
+ 'colorful': 'colorful::ColorfulStyle',
22
+ 'autumn': 'autumn::AutumnStyle',
23
+ 'murphy': 'murphy::MurphyStyle',
24
+ 'manni': 'manni::ManniStyle',
25
+ 'material': 'material::MaterialStyle',
26
+ 'monokai': 'monokai::MonokaiStyle',
27
+ 'perldoc': 'perldoc::PerldocStyle',
28
+ 'pastie': 'pastie::PastieStyle',
29
+ 'borland': 'borland::BorlandStyle',
30
+ 'trac': 'trac::TracStyle',
31
+ 'native': 'native::NativeStyle',
32
+ 'fruity': 'fruity::FruityStyle',
33
+ 'bw': 'bw::BlackWhiteStyle',
34
+ 'vim': 'vim::VimStyle',
35
+ 'vs': 'vs::VisualStudioStyle',
36
+ 'tango': 'tango::TangoStyle',
37
+ 'rrt': 'rrt::RrtStyle',
38
+ 'xcode': 'xcode::XcodeStyle',
39
+ 'igor': 'igor::IgorStyle',
40
+ 'paraiso-light': 'paraiso_light::ParaisoLightStyle',
41
+ 'paraiso-dark': 'paraiso_dark::ParaisoDarkStyle',
42
+ 'lovelace': 'lovelace::LovelaceStyle',
43
+ 'algol': 'algol::AlgolStyle',
44
+ 'algol_nu': 'algol_nu::Algol_NuStyle',
45
+ 'arduino': 'arduino::ArduinoStyle',
46
+ 'rainbow_dash': 'rainbow_dash::RainbowDashStyle',
47
+ 'abap': 'abap::AbapStyle',
48
+ 'solarized-dark': 'solarized::SolarizedDarkStyle',
49
+ 'solarized-light': 'solarized::SolarizedLightStyle',
50
+ 'sas': 'sas::SasStyle',
51
+ 'stata': 'stata_light::StataLightStyle',
52
+ 'stata-light': 'stata_light::StataLightStyle',
53
+ 'stata-dark': 'stata_dark::StataDarkStyle',
54
+ 'inkpot': 'inkpot::InkPotStyle',
55
+ 'zenburn': 'zenburn::ZenburnStyle',
56
+ 'gruvbox-dark': 'gruvbox::GruvboxDarkStyle',
57
+ 'gruvbox-light': 'gruvbox::GruvboxLightStyle',
58
+ 'dracula': 'dracula::DraculaStyle',
59
+ 'one-dark': 'onedark::OneDarkStyle',
60
+ 'lilypond' : 'lilypond::LilyPondStyle',
61
+ }
62
+
63
+
64
+ def get_style_by_name(name):
65
+ if name in STYLE_MAP:
66
+ mod, cls = STYLE_MAP[name].split('::')
67
+ builtin = "yes"
68
+ else:
69
+ for found_name, style in find_plugin_styles():
70
+ if name == found_name:
71
+ return style
72
+ # perhaps it got dropped into our styles package
73
+ builtin = ""
74
+ mod = name
75
+ cls = name.title() + "Style"
76
+
77
+ try:
78
+ mod = __import__('pygments.styles.' + mod, None, None, [cls])
79
+ except ImportError:
80
+ raise ClassNotFound("Could not find style module %r" % mod +
81
+ (builtin and ", though it should be builtin") + ".")
82
+ try:
83
+ return getattr(mod, cls)
84
+ except AttributeError:
85
+ raise ClassNotFound("Could not find style class %r in style module." % cls)
86
+
87
+
88
+ def get_all_styles():
89
+ """Return a generator for all styles by name,
90
+ both builtin and plugin."""
91
+ yield from STYLE_MAP
92
+ for name, _ in find_plugin_styles():
93
+ yield name
venv/lib/python3.10/site-packages/pip/_vendor/pygments/styles/__pycache__/__init__.cpython-310.pyc ADDED
Binary file (3.32 kB). View file
 
venv/lib/python3.10/site-packages/pip/_vendor/pyparsing/__init__.py ADDED
@@ -0,0 +1,328 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # module pyparsing.py
2
+ #
3
+ # Copyright (c) 2003-2021 Paul T. McGuire
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person obtaining
6
+ # a copy of this software and associated documentation files (the
7
+ # "Software"), to deal in the Software without restriction, including
8
+ # without limitation the rights to use, copy, modify, merge, publish,
9
+ # distribute, sublicense, and/or sell copies of the Software, and to
10
+ # permit persons to whom the Software is furnished to do so, subject to
11
+ # the following conditions:
12
+ #
13
+ # The above copyright notice and this permission notice shall be
14
+ # included in all copies or substantial portions of the Software.
15
+ #
16
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19
+ # IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
20
+ # CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
21
+ # TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
22
+ # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23
+ #
24
+
25
+ __doc__ = """
26
+ pyparsing module - Classes and methods to define and execute parsing grammars
27
+ =============================================================================
28
+
29
+ The pyparsing module is an alternative approach to creating and
30
+ executing simple grammars, vs. the traditional lex/yacc approach, or the
31
+ use of regular expressions. With pyparsing, you don't need to learn
32
+ a new syntax for defining grammars or matching expressions - the parsing
33
+ module provides a library of classes that you use to construct the
34
+ grammar directly in Python.
35
+
36
+ Here is a program to parse "Hello, World!" (or any greeting of the form
37
+ ``"<salutation>, <addressee>!"``), built up using :class:`Word`,
38
+ :class:`Literal`, and :class:`And` elements
39
+ (the :meth:`'+'<ParserElement.__add__>` operators create :class:`And` expressions,
40
+ and the strings are auto-converted to :class:`Literal` expressions)::
41
+
42
+ from pip._vendor.pyparsing import Word, alphas
43
+
44
+ # define grammar of a greeting
45
+ greet = Word(alphas) + "," + Word(alphas) + "!"
46
+
47
+ hello = "Hello, World!"
48
+ print(hello, "->", greet.parse_string(hello))
49
+
50
+ The program outputs the following::
51
+
52
+ Hello, World! -> ['Hello', ',', 'World', '!']
53
+
54
+ The Python representation of the grammar is quite readable, owing to the
55
+ self-explanatory class names, and the use of :class:`'+'<And>`,
56
+ :class:`'|'<MatchFirst>`, :class:`'^'<Or>` and :class:`'&'<Each>` operators.
57
+
58
+ The :class:`ParseResults` object returned from
59
+ :class:`ParserElement.parseString` can be
60
+ accessed as a nested list, a dictionary, or an object with named
61
+ attributes.
62
+
63
+ The pyparsing module handles some of the problems that are typically
64
+ vexing when writing text parsers:
65
+
66
+ - extra or missing whitespace (the above program will also handle
67
+ "Hello,World!", "Hello , World !", etc.)
68
+ - quoted strings
69
+ - embedded comments
70
+
71
+
72
+ Getting Started -
73
+ -----------------
74
+ Visit the classes :class:`ParserElement` and :class:`ParseResults` to
75
+ see the base classes that most other pyparsing
76
+ classes inherit from. Use the docstrings for examples of how to:
77
+
78
+ - construct literal match expressions from :class:`Literal` and
79
+ :class:`CaselessLiteral` classes
80
+ - construct character word-group expressions using the :class:`Word`
81
+ class
82
+ - see how to create repetitive expressions using :class:`ZeroOrMore`
83
+ and :class:`OneOrMore` classes
84
+ - use :class:`'+'<And>`, :class:`'|'<MatchFirst>`, :class:`'^'<Or>`,
85
+ and :class:`'&'<Each>` operators to combine simple expressions into
86
+ more complex ones
87
+ - associate names with your parsed results using
88
+ :class:`ParserElement.setResultsName`
89
+ - access the parsed data, which is returned as a :class:`ParseResults`
90
+ object
91
+ - find some helpful expression short-cuts like :class:`delimitedList`
92
+ and :class:`oneOf`
93
+ - find more useful common expressions in the :class:`pyparsing_common`
94
+ namespace class
95
+ """
96
+ from typing import NamedTuple
97
+
98
+
99
+ class version_info(NamedTuple):
100
+ major: int
101
+ minor: int
102
+ micro: int
103
+ releaselevel: str
104
+ serial: int
105
+
106
+ @property
107
+ def __version__(self):
108
+ return "{}.{}.{}".format(self.major, self.minor, self.micro) + (
109
+ "{}{}{}".format(
110
+ "r" if self.releaselevel[0] == "c" else "",
111
+ self.releaselevel[0],
112
+ self.serial,
113
+ ),
114
+ "",
115
+ )[self.releaselevel == "final"]
116
+
117
+ def __str__(self):
118
+ return "{} {} / {}".format(__name__, self.__version__, __version_time__)
119
+
120
+ def __repr__(self):
121
+ return "{}.{}({})".format(
122
+ __name__,
123
+ type(self).__name__,
124
+ ", ".join("{}={!r}".format(*nv) for nv in zip(self._fields, self)),
125
+ )
126
+
127
+
128
+ __version_info__ = version_info(3, 0, 7, "final", 0)
129
+ __version_time__ = "15 Jan 2022 04:10 UTC"
130
+ __version__ = __version_info__.__version__
131
+ __versionTime__ = __version_time__
132
+ __author__ = "Paul McGuire <ptmcg.gm+pyparsing@gmail.com>"
133
+
134
+ from .util import *
135
+ from .exceptions import *
136
+ from .actions import *
137
+ from .core import __diag__, __compat__
138
+ from .results import *
139
+ from .core import *
140
+ from .core import _builtin_exprs as core_builtin_exprs
141
+ from .helpers import *
142
+ from .helpers import _builtin_exprs as helper_builtin_exprs
143
+
144
+ from .unicode import unicode_set, UnicodeRangeList, pyparsing_unicode as unicode
145
+ from .testing import pyparsing_test as testing
146
+ from .common import (
147
+ pyparsing_common as common,
148
+ _builtin_exprs as common_builtin_exprs,
149
+ )
150
+
151
+ # define backward compat synonyms
152
+ if "pyparsing_unicode" not in globals():
153
+ pyparsing_unicode = unicode
154
+ if "pyparsing_common" not in globals():
155
+ pyparsing_common = common
156
+ if "pyparsing_test" not in globals():
157
+ pyparsing_test = testing
158
+
159
+ core_builtin_exprs += common_builtin_exprs + helper_builtin_exprs
160
+
161
+
162
+ __all__ = [
163
+ "__version__",
164
+ "__version_time__",
165
+ "__author__",
166
+ "__compat__",
167
+ "__diag__",
168
+ "And",
169
+ "AtLineStart",
170
+ "AtStringStart",
171
+ "CaselessKeyword",
172
+ "CaselessLiteral",
173
+ "CharsNotIn",
174
+ "Combine",
175
+ "Dict",
176
+ "Each",
177
+ "Empty",
178
+ "FollowedBy",
179
+ "Forward",
180
+ "GoToColumn",
181
+ "Group",
182
+ "IndentedBlock",
183
+ "Keyword",
184
+ "LineEnd",
185
+ "LineStart",
186
+ "Literal",
187
+ "Located",
188
+ "PrecededBy",
189
+ "MatchFirst",
190
+ "NoMatch",
191
+ "NotAny",
192
+ "OneOrMore",
193
+ "OnlyOnce",
194
+ "OpAssoc",
195
+ "Opt",
196
+ "Optional",
197
+ "Or",
198
+ "ParseBaseException",
199
+ "ParseElementEnhance",
200
+ "ParseException",
201
+ "ParseExpression",
202
+ "ParseFatalException",
203
+ "ParseResults",
204
+ "ParseSyntaxException",
205
+ "ParserElement",
206
+ "PositionToken",
207
+ "QuotedString",
208
+ "RecursiveGrammarException",
209
+ "Regex",
210
+ "SkipTo",
211
+ "StringEnd",
212
+ "StringStart",
213
+ "Suppress",
214
+ "Token",
215
+ "TokenConverter",
216
+ "White",
217
+ "Word",
218
+ "WordEnd",
219
+ "WordStart",
220
+ "ZeroOrMore",
221
+ "Char",
222
+ "alphanums",
223
+ "alphas",
224
+ "alphas8bit",
225
+ "any_close_tag",
226
+ "any_open_tag",
227
+ "c_style_comment",
228
+ "col",
229
+ "common_html_entity",
230
+ "counted_array",
231
+ "cpp_style_comment",
232
+ "dbl_quoted_string",
233
+ "dbl_slash_comment",
234
+ "delimited_list",
235
+ "dict_of",
236
+ "empty",
237
+ "hexnums",
238
+ "html_comment",
239
+ "identchars",
240
+ "identbodychars",
241
+ "java_style_comment",
242
+ "line",
243
+ "line_end",
244
+ "line_start",
245
+ "lineno",
246
+ "make_html_tags",
247
+ "make_xml_tags",
248
+ "match_only_at_col",
249
+ "match_previous_expr",
250
+ "match_previous_literal",
251
+ "nested_expr",
252
+ "null_debug_action",
253
+ "nums",
254
+ "one_of",
255
+ "printables",
256
+ "punc8bit",
257
+ "python_style_comment",
258
+ "quoted_string",
259
+ "remove_quotes",
260
+ "replace_with",
261
+ "replace_html_entity",
262
+ "rest_of_line",
263
+ "sgl_quoted_string",
264
+ "srange",
265
+ "string_end",
266
+ "string_start",
267
+ "trace_parse_action",
268
+ "unicode_string",
269
+ "with_attribute",
270
+ "indentedBlock",
271
+ "original_text_for",
272
+ "ungroup",
273
+ "infix_notation",
274
+ "locatedExpr",
275
+ "with_class",
276
+ "CloseMatch",
277
+ "token_map",
278
+ "pyparsing_common",
279
+ "pyparsing_unicode",
280
+ "unicode_set",
281
+ "condition_as_parse_action",
282
+ "pyparsing_test",
283
+ # pre-PEP8 compatibility names
284
+ "__versionTime__",
285
+ "anyCloseTag",
286
+ "anyOpenTag",
287
+ "cStyleComment",
288
+ "commonHTMLEntity",
289
+ "countedArray",
290
+ "cppStyleComment",
291
+ "dblQuotedString",
292
+ "dblSlashComment",
293
+ "delimitedList",
294
+ "dictOf",
295
+ "htmlComment",
296
+ "javaStyleComment",
297
+ "lineEnd",
298
+ "lineStart",
299
+ "makeHTMLTags",
300
+ "makeXMLTags",
301
+ "matchOnlyAtCol",
302
+ "matchPreviousExpr",
303
+ "matchPreviousLiteral",
304
+ "nestedExpr",
305
+ "nullDebugAction",
306
+ "oneOf",
307
+ "opAssoc",
308
+ "pythonStyleComment",
309
+ "quotedString",
310
+ "removeQuotes",
311
+ "replaceHTMLEntity",
312
+ "replaceWith",
313
+ "restOfLine",
314
+ "sglQuotedString",
315
+ "stringEnd",
316
+ "stringStart",
317
+ "traceParseAction",
318
+ "unicodeString",
319
+ "withAttribute",
320
+ "indentedBlock",
321
+ "originalTextFor",
322
+ "infixNotation",
323
+ "locatedExpr",
324
+ "withClass",
325
+ "tokenMap",
326
+ "conditionAsParseAction",
327
+ "autoname_elements",
328
+ ]