Add files using upload-large-folder tool
Browse filesThis view is limited to 50 files because it contains too many changes.
See raw diff
- .gitattributes +1 -0
- .venv/lib/python3.11/site-packages/pip/_vendor/idna/__init__.py +44 -0
- .venv/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/codec.cpython-311.pyc +0 -0
- .venv/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/compat.cpython-311.pyc +0 -0
- .venv/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/core.cpython-311.pyc +0 -0
- .venv/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/idnadata.cpython-311.pyc +0 -0
- .venv/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/intranges.cpython-311.pyc +0 -0
- .venv/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/package_data.cpython-311.pyc +0 -0
- .venv/lib/python3.11/site-packages/pip/_vendor/idna/codec.py +112 -0
- .venv/lib/python3.11/site-packages/pip/_vendor/idna/compat.py +13 -0
- .venv/lib/python3.11/site-packages/pip/_vendor/idna/core.py +400 -0
- .venv/lib/python3.11/site-packages/pip/_vendor/idna/idnadata.py +2151 -0
- .venv/lib/python3.11/site-packages/pip/_vendor/idna/intranges.py +54 -0
- .venv/lib/python3.11/site-packages/pip/_vendor/idna/package_data.py +2 -0
- .venv/lib/python3.11/site-packages/pip/_vendor/idna/py.typed +0 -0
- .venv/lib/python3.11/site-packages/pip/_vendor/idna/uts46data.py +0 -0
- .venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/__init__.cpython-311.pyc +0 -0
- .venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/__main__.cpython-311.pyc +0 -0
- .venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/cmdline.cpython-311.pyc +0 -0
- .venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/console.cpython-311.pyc +0 -0
- .venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/filter.cpython-311.pyc +0 -0
- .venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/formatter.cpython-311.pyc +0 -0
- .venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/lexer.cpython-311.pyc +0 -0
- .venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/modeline.cpython-311.pyc +0 -0
- .venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/plugin.cpython-311.pyc +0 -0
- .venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/regexopt.cpython-311.pyc +0 -0
- .venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/scanner.cpython-311.pyc +0 -0
- .venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/sphinxext.cpython-311.pyc +0 -0
- .venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/style.cpython-311.pyc +0 -0
- .venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/token.cpython-311.pyc +0 -0
- .venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/unistring.cpython-311.pyc +0 -0
- .venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/util.cpython-311.pyc +0 -0
- .venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__init__.py +158 -0
- .venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/__init__.cpython-311.pyc +0 -0
- .venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/_mapping.cpython-311.pyc +0 -0
- .venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/bbcode.cpython-311.pyc +0 -0
- .venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/groff.cpython-311.pyc +0 -0
- .venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/html.cpython-311.pyc +0 -0
- .venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/img.cpython-311.pyc +0 -0
- .venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/irc.cpython-311.pyc +0 -0
- .venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/latex.cpython-311.pyc +0 -0
- .venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/other.cpython-311.pyc +0 -0
- .venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/pangomarkup.cpython-311.pyc +0 -0
- .venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/rtf.cpython-311.pyc +0 -0
- .venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/svg.cpython-311.pyc +0 -0
- .venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/terminal.cpython-311.pyc +0 -0
- .venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/terminal256.cpython-311.pyc +0 -0
- .venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/_mapping.py +23 -0
- .venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/html.py +989 -0
- .venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/other.py +161 -0
.gitattributes
CHANGED
|
@@ -336,3 +336,4 @@ tuning-competition-baseline/.venv/lib/python3.11/site-packages/nvidia/cudnn/lib/
|
|
| 336 |
.venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/langrussianmodel.cpython-311.pyc filter=lfs diff=lfs merge=lfs -text
|
| 337 |
.venv/lib/python3.11/site-packages/pip/_vendor/__pycache__/typing_extensions.cpython-311.pyc filter=lfs diff=lfs merge=lfs -text
|
| 338 |
.venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_emoji_codes.cpython-311.pyc filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
| 336 |
.venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/langrussianmodel.cpython-311.pyc filter=lfs diff=lfs merge=lfs -text
|
| 337 |
.venv/lib/python3.11/site-packages/pip/_vendor/__pycache__/typing_extensions.cpython-311.pyc filter=lfs diff=lfs merge=lfs -text
|
| 338 |
.venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_emoji_codes.cpython-311.pyc filter=lfs diff=lfs merge=lfs -text
|
| 339 |
+
.venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/console.cpython-311.pyc filter=lfs diff=lfs merge=lfs -text
|
.venv/lib/python3.11/site-packages/pip/_vendor/idna/__init__.py
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from .package_data import __version__
|
| 2 |
+
from .core import (
|
| 3 |
+
IDNABidiError,
|
| 4 |
+
IDNAError,
|
| 5 |
+
InvalidCodepoint,
|
| 6 |
+
InvalidCodepointContext,
|
| 7 |
+
alabel,
|
| 8 |
+
check_bidi,
|
| 9 |
+
check_hyphen_ok,
|
| 10 |
+
check_initial_combiner,
|
| 11 |
+
check_label,
|
| 12 |
+
check_nfc,
|
| 13 |
+
decode,
|
| 14 |
+
encode,
|
| 15 |
+
ulabel,
|
| 16 |
+
uts46_remap,
|
| 17 |
+
valid_contextj,
|
| 18 |
+
valid_contexto,
|
| 19 |
+
valid_label_length,
|
| 20 |
+
valid_string_length,
|
| 21 |
+
)
|
| 22 |
+
from .intranges import intranges_contain
|
| 23 |
+
|
| 24 |
+
__all__ = [
|
| 25 |
+
"IDNABidiError",
|
| 26 |
+
"IDNAError",
|
| 27 |
+
"InvalidCodepoint",
|
| 28 |
+
"InvalidCodepointContext",
|
| 29 |
+
"alabel",
|
| 30 |
+
"check_bidi",
|
| 31 |
+
"check_hyphen_ok",
|
| 32 |
+
"check_initial_combiner",
|
| 33 |
+
"check_label",
|
| 34 |
+
"check_nfc",
|
| 35 |
+
"decode",
|
| 36 |
+
"encode",
|
| 37 |
+
"intranges_contain",
|
| 38 |
+
"ulabel",
|
| 39 |
+
"uts46_remap",
|
| 40 |
+
"valid_contextj",
|
| 41 |
+
"valid_contexto",
|
| 42 |
+
"valid_label_length",
|
| 43 |
+
"valid_string_length",
|
| 44 |
+
]
|
.venv/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/codec.cpython-311.pyc
ADDED
|
Binary file (5.38 kB). View file
|
|
|
.venv/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/compat.cpython-311.pyc
ADDED
|
Binary file (1.01 kB). View file
|
|
|
.venv/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/core.cpython-311.pyc
ADDED
|
Binary file (19.4 kB). View file
|
|
|
.venv/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/idnadata.cpython-311.pyc
ADDED
|
Binary file (39 kB). View file
|
|
|
.venv/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/intranges.cpython-311.pyc
ADDED
|
Binary file (2.98 kB). View file
|
|
|
.venv/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/package_data.cpython-311.pyc
ADDED
|
Binary file (211 Bytes). View file
|
|
|
.venv/lib/python3.11/site-packages/pip/_vendor/idna/codec.py
ADDED
|
@@ -0,0 +1,112 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from .core import encode, decode, alabel, ulabel, IDNAError
|
| 2 |
+
import codecs
|
| 3 |
+
import re
|
| 4 |
+
from typing import Tuple, Optional
|
| 5 |
+
|
| 6 |
+
_unicode_dots_re = re.compile('[\u002e\u3002\uff0e\uff61]')
|
| 7 |
+
|
| 8 |
+
class Codec(codecs.Codec):
|
| 9 |
+
|
| 10 |
+
def encode(self, data: str, errors: str = 'strict') -> Tuple[bytes, int]:
|
| 11 |
+
if errors != 'strict':
|
| 12 |
+
raise IDNAError('Unsupported error handling \"{}\"'.format(errors))
|
| 13 |
+
|
| 14 |
+
if not data:
|
| 15 |
+
return b"", 0
|
| 16 |
+
|
| 17 |
+
return encode(data), len(data)
|
| 18 |
+
|
| 19 |
+
def decode(self, data: bytes, errors: str = 'strict') -> Tuple[str, int]:
|
| 20 |
+
if errors != 'strict':
|
| 21 |
+
raise IDNAError('Unsupported error handling \"{}\"'.format(errors))
|
| 22 |
+
|
| 23 |
+
if not data:
|
| 24 |
+
return '', 0
|
| 25 |
+
|
| 26 |
+
return decode(data), len(data)
|
| 27 |
+
|
| 28 |
+
class IncrementalEncoder(codecs.BufferedIncrementalEncoder):
|
| 29 |
+
def _buffer_encode(self, data: str, errors: str, final: bool) -> Tuple[str, int]: # type: ignore
|
| 30 |
+
if errors != 'strict':
|
| 31 |
+
raise IDNAError('Unsupported error handling \"{}\"'.format(errors))
|
| 32 |
+
|
| 33 |
+
if not data:
|
| 34 |
+
return "", 0
|
| 35 |
+
|
| 36 |
+
labels = _unicode_dots_re.split(data)
|
| 37 |
+
trailing_dot = ''
|
| 38 |
+
if labels:
|
| 39 |
+
if not labels[-1]:
|
| 40 |
+
trailing_dot = '.'
|
| 41 |
+
del labels[-1]
|
| 42 |
+
elif not final:
|
| 43 |
+
# Keep potentially unfinished label until the next call
|
| 44 |
+
del labels[-1]
|
| 45 |
+
if labels:
|
| 46 |
+
trailing_dot = '.'
|
| 47 |
+
|
| 48 |
+
result = []
|
| 49 |
+
size = 0
|
| 50 |
+
for label in labels:
|
| 51 |
+
result.append(alabel(label))
|
| 52 |
+
if size:
|
| 53 |
+
size += 1
|
| 54 |
+
size += len(label)
|
| 55 |
+
|
| 56 |
+
# Join with U+002E
|
| 57 |
+
result_str = '.'.join(result) + trailing_dot # type: ignore
|
| 58 |
+
size += len(trailing_dot)
|
| 59 |
+
return result_str, size
|
| 60 |
+
|
| 61 |
+
class IncrementalDecoder(codecs.BufferedIncrementalDecoder):
|
| 62 |
+
def _buffer_decode(self, data: str, errors: str, final: bool) -> Tuple[str, int]: # type: ignore
|
| 63 |
+
if errors != 'strict':
|
| 64 |
+
raise IDNAError('Unsupported error handling \"{}\"'.format(errors))
|
| 65 |
+
|
| 66 |
+
if not data:
|
| 67 |
+
return ('', 0)
|
| 68 |
+
|
| 69 |
+
labels = _unicode_dots_re.split(data)
|
| 70 |
+
trailing_dot = ''
|
| 71 |
+
if labels:
|
| 72 |
+
if not labels[-1]:
|
| 73 |
+
trailing_dot = '.'
|
| 74 |
+
del labels[-1]
|
| 75 |
+
elif not final:
|
| 76 |
+
# Keep potentially unfinished label until the next call
|
| 77 |
+
del labels[-1]
|
| 78 |
+
if labels:
|
| 79 |
+
trailing_dot = '.'
|
| 80 |
+
|
| 81 |
+
result = []
|
| 82 |
+
size = 0
|
| 83 |
+
for label in labels:
|
| 84 |
+
result.append(ulabel(label))
|
| 85 |
+
if size:
|
| 86 |
+
size += 1
|
| 87 |
+
size += len(label)
|
| 88 |
+
|
| 89 |
+
result_str = '.'.join(result) + trailing_dot
|
| 90 |
+
size += len(trailing_dot)
|
| 91 |
+
return (result_str, size)
|
| 92 |
+
|
| 93 |
+
|
| 94 |
+
class StreamWriter(Codec, codecs.StreamWriter):
|
| 95 |
+
pass
|
| 96 |
+
|
| 97 |
+
|
| 98 |
+
class StreamReader(Codec, codecs.StreamReader):
|
| 99 |
+
pass
|
| 100 |
+
|
| 101 |
+
|
| 102 |
+
def getregentry() -> codecs.CodecInfo:
|
| 103 |
+
# Compatibility as a search_function for codecs.register()
|
| 104 |
+
return codecs.CodecInfo(
|
| 105 |
+
name='idna',
|
| 106 |
+
encode=Codec().encode, # type: ignore
|
| 107 |
+
decode=Codec().decode, # type: ignore
|
| 108 |
+
incrementalencoder=IncrementalEncoder,
|
| 109 |
+
incrementaldecoder=IncrementalDecoder,
|
| 110 |
+
streamwriter=StreamWriter,
|
| 111 |
+
streamreader=StreamReader,
|
| 112 |
+
)
|
.venv/lib/python3.11/site-packages/pip/_vendor/idna/compat.py
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from .core import *
|
| 2 |
+
from .codec import *
|
| 3 |
+
from typing import Any, Union
|
| 4 |
+
|
| 5 |
+
def ToASCII(label: str) -> bytes:
|
| 6 |
+
return encode(label)
|
| 7 |
+
|
| 8 |
+
def ToUnicode(label: Union[bytes, bytearray]) -> str:
|
| 9 |
+
return decode(label)
|
| 10 |
+
|
| 11 |
+
def nameprep(s: Any) -> None:
|
| 12 |
+
raise NotImplementedError('IDNA 2008 does not utilise nameprep protocol')
|
| 13 |
+
|
.venv/lib/python3.11/site-packages/pip/_vendor/idna/core.py
ADDED
|
@@ -0,0 +1,400 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from . import idnadata
|
| 2 |
+
import bisect
|
| 3 |
+
import unicodedata
|
| 4 |
+
import re
|
| 5 |
+
from typing import Union, Optional
|
| 6 |
+
from .intranges import intranges_contain
|
| 7 |
+
|
| 8 |
+
_virama_combining_class = 9
|
| 9 |
+
_alabel_prefix = b'xn--'
|
| 10 |
+
_unicode_dots_re = re.compile('[\u002e\u3002\uff0e\uff61]')
|
| 11 |
+
|
| 12 |
+
class IDNAError(UnicodeError):
|
| 13 |
+
""" Base exception for all IDNA-encoding related problems """
|
| 14 |
+
pass
|
| 15 |
+
|
| 16 |
+
|
| 17 |
+
class IDNABidiError(IDNAError):
|
| 18 |
+
""" Exception when bidirectional requirements are not satisfied """
|
| 19 |
+
pass
|
| 20 |
+
|
| 21 |
+
|
| 22 |
+
class InvalidCodepoint(IDNAError):
|
| 23 |
+
""" Exception when a disallowed or unallocated codepoint is used """
|
| 24 |
+
pass
|
| 25 |
+
|
| 26 |
+
|
| 27 |
+
class InvalidCodepointContext(IDNAError):
|
| 28 |
+
""" Exception when the codepoint is not valid in the context it is used """
|
| 29 |
+
pass
|
| 30 |
+
|
| 31 |
+
|
| 32 |
+
def _combining_class(cp: int) -> int:
|
| 33 |
+
v = unicodedata.combining(chr(cp))
|
| 34 |
+
if v == 0:
|
| 35 |
+
if not unicodedata.name(chr(cp)):
|
| 36 |
+
raise ValueError('Unknown character in unicodedata')
|
| 37 |
+
return v
|
| 38 |
+
|
| 39 |
+
def _is_script(cp: str, script: str) -> bool:
|
| 40 |
+
return intranges_contain(ord(cp), idnadata.scripts[script])
|
| 41 |
+
|
| 42 |
+
def _punycode(s: str) -> bytes:
|
| 43 |
+
return s.encode('punycode')
|
| 44 |
+
|
| 45 |
+
def _unot(s: int) -> str:
|
| 46 |
+
return 'U+{:04X}'.format(s)
|
| 47 |
+
|
| 48 |
+
|
| 49 |
+
def valid_label_length(label: Union[bytes, str]) -> bool:
|
| 50 |
+
if len(label) > 63:
|
| 51 |
+
return False
|
| 52 |
+
return True
|
| 53 |
+
|
| 54 |
+
|
| 55 |
+
def valid_string_length(label: Union[bytes, str], trailing_dot: bool) -> bool:
|
| 56 |
+
if len(label) > (254 if trailing_dot else 253):
|
| 57 |
+
return False
|
| 58 |
+
return True
|
| 59 |
+
|
| 60 |
+
|
| 61 |
+
def check_bidi(label: str, check_ltr: bool = False) -> bool:
|
| 62 |
+
# Bidi rules should only be applied if string contains RTL characters
|
| 63 |
+
bidi_label = False
|
| 64 |
+
for (idx, cp) in enumerate(label, 1):
|
| 65 |
+
direction = unicodedata.bidirectional(cp)
|
| 66 |
+
if direction == '':
|
| 67 |
+
# String likely comes from a newer version of Unicode
|
| 68 |
+
raise IDNABidiError('Unknown directionality in label {} at position {}'.format(repr(label), idx))
|
| 69 |
+
if direction in ['R', 'AL', 'AN']:
|
| 70 |
+
bidi_label = True
|
| 71 |
+
if not bidi_label and not check_ltr:
|
| 72 |
+
return True
|
| 73 |
+
|
| 74 |
+
# Bidi rule 1
|
| 75 |
+
direction = unicodedata.bidirectional(label[0])
|
| 76 |
+
if direction in ['R', 'AL']:
|
| 77 |
+
rtl = True
|
| 78 |
+
elif direction == 'L':
|
| 79 |
+
rtl = False
|
| 80 |
+
else:
|
| 81 |
+
raise IDNABidiError('First codepoint in label {} must be directionality L, R or AL'.format(repr(label)))
|
| 82 |
+
|
| 83 |
+
valid_ending = False
|
| 84 |
+
number_type = None # type: Optional[str]
|
| 85 |
+
for (idx, cp) in enumerate(label, 1):
|
| 86 |
+
direction = unicodedata.bidirectional(cp)
|
| 87 |
+
|
| 88 |
+
if rtl:
|
| 89 |
+
# Bidi rule 2
|
| 90 |
+
if not direction in ['R', 'AL', 'AN', 'EN', 'ES', 'CS', 'ET', 'ON', 'BN', 'NSM']:
|
| 91 |
+
raise IDNABidiError('Invalid direction for codepoint at position {} in a right-to-left label'.format(idx))
|
| 92 |
+
# Bidi rule 3
|
| 93 |
+
if direction in ['R', 'AL', 'EN', 'AN']:
|
| 94 |
+
valid_ending = True
|
| 95 |
+
elif direction != 'NSM':
|
| 96 |
+
valid_ending = False
|
| 97 |
+
# Bidi rule 4
|
| 98 |
+
if direction in ['AN', 'EN']:
|
| 99 |
+
if not number_type:
|
| 100 |
+
number_type = direction
|
| 101 |
+
else:
|
| 102 |
+
if number_type != direction:
|
| 103 |
+
raise IDNABidiError('Can not mix numeral types in a right-to-left label')
|
| 104 |
+
else:
|
| 105 |
+
# Bidi rule 5
|
| 106 |
+
if not direction in ['L', 'EN', 'ES', 'CS', 'ET', 'ON', 'BN', 'NSM']:
|
| 107 |
+
raise IDNABidiError('Invalid direction for codepoint at position {} in a left-to-right label'.format(idx))
|
| 108 |
+
# Bidi rule 6
|
| 109 |
+
if direction in ['L', 'EN']:
|
| 110 |
+
valid_ending = True
|
| 111 |
+
elif direction != 'NSM':
|
| 112 |
+
valid_ending = False
|
| 113 |
+
|
| 114 |
+
if not valid_ending:
|
| 115 |
+
raise IDNABidiError('Label ends with illegal codepoint directionality')
|
| 116 |
+
|
| 117 |
+
return True
|
| 118 |
+
|
| 119 |
+
|
| 120 |
+
def check_initial_combiner(label: str) -> bool:
|
| 121 |
+
if unicodedata.category(label[0])[0] == 'M':
|
| 122 |
+
raise IDNAError('Label begins with an illegal combining character')
|
| 123 |
+
return True
|
| 124 |
+
|
| 125 |
+
|
| 126 |
+
def check_hyphen_ok(label: str) -> bool:
|
| 127 |
+
if label[2:4] == '--':
|
| 128 |
+
raise IDNAError('Label has disallowed hyphens in 3rd and 4th position')
|
| 129 |
+
if label[0] == '-' or label[-1] == '-':
|
| 130 |
+
raise IDNAError('Label must not start or end with a hyphen')
|
| 131 |
+
return True
|
| 132 |
+
|
| 133 |
+
|
| 134 |
+
def check_nfc(label: str) -> None:
|
| 135 |
+
if unicodedata.normalize('NFC', label) != label:
|
| 136 |
+
raise IDNAError('Label must be in Normalization Form C')
|
| 137 |
+
|
| 138 |
+
|
| 139 |
+
def valid_contextj(label: str, pos: int) -> bool:
|
| 140 |
+
cp_value = ord(label[pos])
|
| 141 |
+
|
| 142 |
+
if cp_value == 0x200c:
|
| 143 |
+
|
| 144 |
+
if pos > 0:
|
| 145 |
+
if _combining_class(ord(label[pos - 1])) == _virama_combining_class:
|
| 146 |
+
return True
|
| 147 |
+
|
| 148 |
+
ok = False
|
| 149 |
+
for i in range(pos-1, -1, -1):
|
| 150 |
+
joining_type = idnadata.joining_types.get(ord(label[i]))
|
| 151 |
+
if joining_type == ord('T'):
|
| 152 |
+
continue
|
| 153 |
+
if joining_type in [ord('L'), ord('D')]:
|
| 154 |
+
ok = True
|
| 155 |
+
break
|
| 156 |
+
|
| 157 |
+
if not ok:
|
| 158 |
+
return False
|
| 159 |
+
|
| 160 |
+
ok = False
|
| 161 |
+
for i in range(pos+1, len(label)):
|
| 162 |
+
joining_type = idnadata.joining_types.get(ord(label[i]))
|
| 163 |
+
if joining_type == ord('T'):
|
| 164 |
+
continue
|
| 165 |
+
if joining_type in [ord('R'), ord('D')]:
|
| 166 |
+
ok = True
|
| 167 |
+
break
|
| 168 |
+
return ok
|
| 169 |
+
|
| 170 |
+
if cp_value == 0x200d:
|
| 171 |
+
|
| 172 |
+
if pos > 0:
|
| 173 |
+
if _combining_class(ord(label[pos - 1])) == _virama_combining_class:
|
| 174 |
+
return True
|
| 175 |
+
return False
|
| 176 |
+
|
| 177 |
+
else:
|
| 178 |
+
|
| 179 |
+
return False
|
| 180 |
+
|
| 181 |
+
|
| 182 |
+
def valid_contexto(label: str, pos: int, exception: bool = False) -> bool:
|
| 183 |
+
cp_value = ord(label[pos])
|
| 184 |
+
|
| 185 |
+
if cp_value == 0x00b7:
|
| 186 |
+
if 0 < pos < len(label)-1:
|
| 187 |
+
if ord(label[pos - 1]) == 0x006c and ord(label[pos + 1]) == 0x006c:
|
| 188 |
+
return True
|
| 189 |
+
return False
|
| 190 |
+
|
| 191 |
+
elif cp_value == 0x0375:
|
| 192 |
+
if pos < len(label)-1 and len(label) > 1:
|
| 193 |
+
return _is_script(label[pos + 1], 'Greek')
|
| 194 |
+
return False
|
| 195 |
+
|
| 196 |
+
elif cp_value == 0x05f3 or cp_value == 0x05f4:
|
| 197 |
+
if pos > 0:
|
| 198 |
+
return _is_script(label[pos - 1], 'Hebrew')
|
| 199 |
+
return False
|
| 200 |
+
|
| 201 |
+
elif cp_value == 0x30fb:
|
| 202 |
+
for cp in label:
|
| 203 |
+
if cp == '\u30fb':
|
| 204 |
+
continue
|
| 205 |
+
if _is_script(cp, 'Hiragana') or _is_script(cp, 'Katakana') or _is_script(cp, 'Han'):
|
| 206 |
+
return True
|
| 207 |
+
return False
|
| 208 |
+
|
| 209 |
+
elif 0x660 <= cp_value <= 0x669:
|
| 210 |
+
for cp in label:
|
| 211 |
+
if 0x6f0 <= ord(cp) <= 0x06f9:
|
| 212 |
+
return False
|
| 213 |
+
return True
|
| 214 |
+
|
| 215 |
+
elif 0x6f0 <= cp_value <= 0x6f9:
|
| 216 |
+
for cp in label:
|
| 217 |
+
if 0x660 <= ord(cp) <= 0x0669:
|
| 218 |
+
return False
|
| 219 |
+
return True
|
| 220 |
+
|
| 221 |
+
return False
|
| 222 |
+
|
| 223 |
+
|
| 224 |
+
def check_label(label: Union[str, bytes, bytearray]) -> None:
|
| 225 |
+
if isinstance(label, (bytes, bytearray)):
|
| 226 |
+
label = label.decode('utf-8')
|
| 227 |
+
if len(label) == 0:
|
| 228 |
+
raise IDNAError('Empty Label')
|
| 229 |
+
|
| 230 |
+
check_nfc(label)
|
| 231 |
+
check_hyphen_ok(label)
|
| 232 |
+
check_initial_combiner(label)
|
| 233 |
+
|
| 234 |
+
for (pos, cp) in enumerate(label):
|
| 235 |
+
cp_value = ord(cp)
|
| 236 |
+
if intranges_contain(cp_value, idnadata.codepoint_classes['PVALID']):
|
| 237 |
+
continue
|
| 238 |
+
elif intranges_contain(cp_value, idnadata.codepoint_classes['CONTEXTJ']):
|
| 239 |
+
try:
|
| 240 |
+
if not valid_contextj(label, pos):
|
| 241 |
+
raise InvalidCodepointContext('Joiner {} not allowed at position {} in {}'.format(
|
| 242 |
+
_unot(cp_value), pos+1, repr(label)))
|
| 243 |
+
except ValueError:
|
| 244 |
+
raise IDNAError('Unknown codepoint adjacent to joiner {} at position {} in {}'.format(
|
| 245 |
+
_unot(cp_value), pos+1, repr(label)))
|
| 246 |
+
elif intranges_contain(cp_value, idnadata.codepoint_classes['CONTEXTO']):
|
| 247 |
+
if not valid_contexto(label, pos):
|
| 248 |
+
raise InvalidCodepointContext('Codepoint {} not allowed at position {} in {}'.format(_unot(cp_value), pos+1, repr(label)))
|
| 249 |
+
else:
|
| 250 |
+
raise InvalidCodepoint('Codepoint {} at position {} of {} not allowed'.format(_unot(cp_value), pos+1, repr(label)))
|
| 251 |
+
|
| 252 |
+
check_bidi(label)
|
| 253 |
+
|
| 254 |
+
|
| 255 |
+
def alabel(label: str) -> bytes:
|
| 256 |
+
try:
|
| 257 |
+
label_bytes = label.encode('ascii')
|
| 258 |
+
ulabel(label_bytes)
|
| 259 |
+
if not valid_label_length(label_bytes):
|
| 260 |
+
raise IDNAError('Label too long')
|
| 261 |
+
return label_bytes
|
| 262 |
+
except UnicodeEncodeError:
|
| 263 |
+
pass
|
| 264 |
+
|
| 265 |
+
if not label:
|
| 266 |
+
raise IDNAError('No Input')
|
| 267 |
+
|
| 268 |
+
label = str(label)
|
| 269 |
+
check_label(label)
|
| 270 |
+
label_bytes = _punycode(label)
|
| 271 |
+
label_bytes = _alabel_prefix + label_bytes
|
| 272 |
+
|
| 273 |
+
if not valid_label_length(label_bytes):
|
| 274 |
+
raise IDNAError('Label too long')
|
| 275 |
+
|
| 276 |
+
return label_bytes
|
| 277 |
+
|
| 278 |
+
|
| 279 |
+
def ulabel(label: Union[str, bytes, bytearray]) -> str:
|
| 280 |
+
if not isinstance(label, (bytes, bytearray)):
|
| 281 |
+
try:
|
| 282 |
+
label_bytes = label.encode('ascii')
|
| 283 |
+
except UnicodeEncodeError:
|
| 284 |
+
check_label(label)
|
| 285 |
+
return label
|
| 286 |
+
else:
|
| 287 |
+
label_bytes = label
|
| 288 |
+
|
| 289 |
+
label_bytes = label_bytes.lower()
|
| 290 |
+
if label_bytes.startswith(_alabel_prefix):
|
| 291 |
+
label_bytes = label_bytes[len(_alabel_prefix):]
|
| 292 |
+
if not label_bytes:
|
| 293 |
+
raise IDNAError('Malformed A-label, no Punycode eligible content found')
|
| 294 |
+
if label_bytes.decode('ascii')[-1] == '-':
|
| 295 |
+
raise IDNAError('A-label must not end with a hyphen')
|
| 296 |
+
else:
|
| 297 |
+
check_label(label_bytes)
|
| 298 |
+
return label_bytes.decode('ascii')
|
| 299 |
+
|
| 300 |
+
try:
|
| 301 |
+
label = label_bytes.decode('punycode')
|
| 302 |
+
except UnicodeError:
|
| 303 |
+
raise IDNAError('Invalid A-label')
|
| 304 |
+
check_label(label)
|
| 305 |
+
return label
|
| 306 |
+
|
| 307 |
+
|
| 308 |
+
def uts46_remap(domain: str, std3_rules: bool = True, transitional: bool = False) -> str:
|
| 309 |
+
"""Re-map the characters in the string according to UTS46 processing."""
|
| 310 |
+
from .uts46data import uts46data
|
| 311 |
+
output = ''
|
| 312 |
+
|
| 313 |
+
for pos, char in enumerate(domain):
|
| 314 |
+
code_point = ord(char)
|
| 315 |
+
try:
|
| 316 |
+
uts46row = uts46data[code_point if code_point < 256 else
|
| 317 |
+
bisect.bisect_left(uts46data, (code_point, 'Z')) - 1]
|
| 318 |
+
status = uts46row[1]
|
| 319 |
+
replacement = None # type: Optional[str]
|
| 320 |
+
if len(uts46row) == 3:
|
| 321 |
+
replacement = uts46row[2] # type: ignore
|
| 322 |
+
if (status == 'V' or
|
| 323 |
+
(status == 'D' and not transitional) or
|
| 324 |
+
(status == '3' and not std3_rules and replacement is None)):
|
| 325 |
+
output += char
|
| 326 |
+
elif replacement is not None and (status == 'M' or
|
| 327 |
+
(status == '3' and not std3_rules) or
|
| 328 |
+
(status == 'D' and transitional)):
|
| 329 |
+
output += replacement
|
| 330 |
+
elif status != 'I':
|
| 331 |
+
raise IndexError()
|
| 332 |
+
except IndexError:
|
| 333 |
+
raise InvalidCodepoint(
|
| 334 |
+
'Codepoint {} not allowed at position {} in {}'.format(
|
| 335 |
+
_unot(code_point), pos + 1, repr(domain)))
|
| 336 |
+
|
| 337 |
+
return unicodedata.normalize('NFC', output)
|
| 338 |
+
|
| 339 |
+
|
| 340 |
+
def encode(s: Union[str, bytes, bytearray], strict: bool = False, uts46: bool = False, std3_rules: bool = False, transitional: bool = False) -> bytes:
|
| 341 |
+
if isinstance(s, (bytes, bytearray)):
|
| 342 |
+
try:
|
| 343 |
+
s = s.decode('ascii')
|
| 344 |
+
except UnicodeDecodeError:
|
| 345 |
+
raise IDNAError('should pass a unicode string to the function rather than a byte string.')
|
| 346 |
+
if uts46:
|
| 347 |
+
s = uts46_remap(s, std3_rules, transitional)
|
| 348 |
+
trailing_dot = False
|
| 349 |
+
result = []
|
| 350 |
+
if strict:
|
| 351 |
+
labels = s.split('.')
|
| 352 |
+
else:
|
| 353 |
+
labels = _unicode_dots_re.split(s)
|
| 354 |
+
if not labels or labels == ['']:
|
| 355 |
+
raise IDNAError('Empty domain')
|
| 356 |
+
if labels[-1] == '':
|
| 357 |
+
del labels[-1]
|
| 358 |
+
trailing_dot = True
|
| 359 |
+
for label in labels:
|
| 360 |
+
s = alabel(label)
|
| 361 |
+
if s:
|
| 362 |
+
result.append(s)
|
| 363 |
+
else:
|
| 364 |
+
raise IDNAError('Empty label')
|
| 365 |
+
if trailing_dot:
|
| 366 |
+
result.append(b'')
|
| 367 |
+
s = b'.'.join(result)
|
| 368 |
+
if not valid_string_length(s, trailing_dot):
|
| 369 |
+
raise IDNAError('Domain too long')
|
| 370 |
+
return s
|
| 371 |
+
|
| 372 |
+
|
| 373 |
+
def decode(s: Union[str, bytes, bytearray], strict: bool = False, uts46: bool = False, std3_rules: bool = False) -> str:
|
| 374 |
+
try:
|
| 375 |
+
if isinstance(s, (bytes, bytearray)):
|
| 376 |
+
s = s.decode('ascii')
|
| 377 |
+
except UnicodeDecodeError:
|
| 378 |
+
raise IDNAError('Invalid ASCII in A-label')
|
| 379 |
+
if uts46:
|
| 380 |
+
s = uts46_remap(s, std3_rules, False)
|
| 381 |
+
trailing_dot = False
|
| 382 |
+
result = []
|
| 383 |
+
if not strict:
|
| 384 |
+
labels = _unicode_dots_re.split(s)
|
| 385 |
+
else:
|
| 386 |
+
labels = s.split('.')
|
| 387 |
+
if not labels or labels == ['']:
|
| 388 |
+
raise IDNAError('Empty domain')
|
| 389 |
+
if not labels[-1]:
|
| 390 |
+
del labels[-1]
|
| 391 |
+
trailing_dot = True
|
| 392 |
+
for label in labels:
|
| 393 |
+
s = ulabel(label)
|
| 394 |
+
if s:
|
| 395 |
+
result.append(s)
|
| 396 |
+
else:
|
| 397 |
+
raise IDNAError('Empty label')
|
| 398 |
+
if trailing_dot:
|
| 399 |
+
result.append('')
|
| 400 |
+
return '.'.join(result)
|
.venv/lib/python3.11/site-packages/pip/_vendor/idna/idnadata.py
ADDED
|
@@ -0,0 +1,2151 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# This file is automatically generated by tools/idna-data
|
| 2 |
+
|
| 3 |
+
__version__ = '15.0.0'
|
| 4 |
+
scripts = {
|
| 5 |
+
'Greek': (
|
| 6 |
+
0x37000000374,
|
| 7 |
+
0x37500000378,
|
| 8 |
+
0x37a0000037e,
|
| 9 |
+
0x37f00000380,
|
| 10 |
+
0x38400000385,
|
| 11 |
+
0x38600000387,
|
| 12 |
+
0x3880000038b,
|
| 13 |
+
0x38c0000038d,
|
| 14 |
+
0x38e000003a2,
|
| 15 |
+
0x3a3000003e2,
|
| 16 |
+
0x3f000000400,
|
| 17 |
+
0x1d2600001d2b,
|
| 18 |
+
0x1d5d00001d62,
|
| 19 |
+
0x1d6600001d6b,
|
| 20 |
+
0x1dbf00001dc0,
|
| 21 |
+
0x1f0000001f16,
|
| 22 |
+
0x1f1800001f1e,
|
| 23 |
+
0x1f2000001f46,
|
| 24 |
+
0x1f4800001f4e,
|
| 25 |
+
0x1f5000001f58,
|
| 26 |
+
0x1f5900001f5a,
|
| 27 |
+
0x1f5b00001f5c,
|
| 28 |
+
0x1f5d00001f5e,
|
| 29 |
+
0x1f5f00001f7e,
|
| 30 |
+
0x1f8000001fb5,
|
| 31 |
+
0x1fb600001fc5,
|
| 32 |
+
0x1fc600001fd4,
|
| 33 |
+
0x1fd600001fdc,
|
| 34 |
+
0x1fdd00001ff0,
|
| 35 |
+
0x1ff200001ff5,
|
| 36 |
+
0x1ff600001fff,
|
| 37 |
+
0x212600002127,
|
| 38 |
+
0xab650000ab66,
|
| 39 |
+
0x101400001018f,
|
| 40 |
+
0x101a0000101a1,
|
| 41 |
+
0x1d2000001d246,
|
| 42 |
+
),
|
| 43 |
+
'Han': (
|
| 44 |
+
0x2e8000002e9a,
|
| 45 |
+
0x2e9b00002ef4,
|
| 46 |
+
0x2f0000002fd6,
|
| 47 |
+
0x300500003006,
|
| 48 |
+
0x300700003008,
|
| 49 |
+
0x30210000302a,
|
| 50 |
+
0x30380000303c,
|
| 51 |
+
0x340000004dc0,
|
| 52 |
+
0x4e000000a000,
|
| 53 |
+
0xf9000000fa6e,
|
| 54 |
+
0xfa700000fada,
|
| 55 |
+
0x16fe200016fe4,
|
| 56 |
+
0x16ff000016ff2,
|
| 57 |
+
0x200000002a6e0,
|
| 58 |
+
0x2a7000002b73a,
|
| 59 |
+
0x2b7400002b81e,
|
| 60 |
+
0x2b8200002cea2,
|
| 61 |
+
0x2ceb00002ebe1,
|
| 62 |
+
0x2f8000002fa1e,
|
| 63 |
+
0x300000003134b,
|
| 64 |
+
0x31350000323b0,
|
| 65 |
+
),
|
| 66 |
+
'Hebrew': (
|
| 67 |
+
0x591000005c8,
|
| 68 |
+
0x5d0000005eb,
|
| 69 |
+
0x5ef000005f5,
|
| 70 |
+
0xfb1d0000fb37,
|
| 71 |
+
0xfb380000fb3d,
|
| 72 |
+
0xfb3e0000fb3f,
|
| 73 |
+
0xfb400000fb42,
|
| 74 |
+
0xfb430000fb45,
|
| 75 |
+
0xfb460000fb50,
|
| 76 |
+
),
|
| 77 |
+
'Hiragana': (
|
| 78 |
+
0x304100003097,
|
| 79 |
+
0x309d000030a0,
|
| 80 |
+
0x1b0010001b120,
|
| 81 |
+
0x1b1320001b133,
|
| 82 |
+
0x1b1500001b153,
|
| 83 |
+
0x1f2000001f201,
|
| 84 |
+
),
|
| 85 |
+
'Katakana': (
|
| 86 |
+
0x30a1000030fb,
|
| 87 |
+
0x30fd00003100,
|
| 88 |
+
0x31f000003200,
|
| 89 |
+
0x32d0000032ff,
|
| 90 |
+
0x330000003358,
|
| 91 |
+
0xff660000ff70,
|
| 92 |
+
0xff710000ff9e,
|
| 93 |
+
0x1aff00001aff4,
|
| 94 |
+
0x1aff50001affc,
|
| 95 |
+
0x1affd0001afff,
|
| 96 |
+
0x1b0000001b001,
|
| 97 |
+
0x1b1200001b123,
|
| 98 |
+
0x1b1550001b156,
|
| 99 |
+
0x1b1640001b168,
|
| 100 |
+
),
|
| 101 |
+
}
|
| 102 |
+
joining_types = {
|
| 103 |
+
0x600: 85,
|
| 104 |
+
0x601: 85,
|
| 105 |
+
0x602: 85,
|
| 106 |
+
0x603: 85,
|
| 107 |
+
0x604: 85,
|
| 108 |
+
0x605: 85,
|
| 109 |
+
0x608: 85,
|
| 110 |
+
0x60b: 85,
|
| 111 |
+
0x620: 68,
|
| 112 |
+
0x621: 85,
|
| 113 |
+
0x622: 82,
|
| 114 |
+
0x623: 82,
|
| 115 |
+
0x624: 82,
|
| 116 |
+
0x625: 82,
|
| 117 |
+
0x626: 68,
|
| 118 |
+
0x627: 82,
|
| 119 |
+
0x628: 68,
|
| 120 |
+
0x629: 82,
|
| 121 |
+
0x62a: 68,
|
| 122 |
+
0x62b: 68,
|
| 123 |
+
0x62c: 68,
|
| 124 |
+
0x62d: 68,
|
| 125 |
+
0x62e: 68,
|
| 126 |
+
0x62f: 82,
|
| 127 |
+
0x630: 82,
|
| 128 |
+
0x631: 82,
|
| 129 |
+
0x632: 82,
|
| 130 |
+
0x633: 68,
|
| 131 |
+
0x634: 68,
|
| 132 |
+
0x635: 68,
|
| 133 |
+
0x636: 68,
|
| 134 |
+
0x637: 68,
|
| 135 |
+
0x638: 68,
|
| 136 |
+
0x639: 68,
|
| 137 |
+
0x63a: 68,
|
| 138 |
+
0x63b: 68,
|
| 139 |
+
0x63c: 68,
|
| 140 |
+
0x63d: 68,
|
| 141 |
+
0x63e: 68,
|
| 142 |
+
0x63f: 68,
|
| 143 |
+
0x640: 67,
|
| 144 |
+
0x641: 68,
|
| 145 |
+
0x642: 68,
|
| 146 |
+
0x643: 68,
|
| 147 |
+
0x644: 68,
|
| 148 |
+
0x645: 68,
|
| 149 |
+
0x646: 68,
|
| 150 |
+
0x647: 68,
|
| 151 |
+
0x648: 82,
|
| 152 |
+
0x649: 68,
|
| 153 |
+
0x64a: 68,
|
| 154 |
+
0x66e: 68,
|
| 155 |
+
0x66f: 68,
|
| 156 |
+
0x671: 82,
|
| 157 |
+
0x672: 82,
|
| 158 |
+
0x673: 82,
|
| 159 |
+
0x674: 85,
|
| 160 |
+
0x675: 82,
|
| 161 |
+
0x676: 82,
|
| 162 |
+
0x677: 82,
|
| 163 |
+
0x678: 68,
|
| 164 |
+
0x679: 68,
|
| 165 |
+
0x67a: 68,
|
| 166 |
+
0x67b: 68,
|
| 167 |
+
0x67c: 68,
|
| 168 |
+
0x67d: 68,
|
| 169 |
+
0x67e: 68,
|
| 170 |
+
0x67f: 68,
|
| 171 |
+
0x680: 68,
|
| 172 |
+
0x681: 68,
|
| 173 |
+
0x682: 68,
|
| 174 |
+
0x683: 68,
|
| 175 |
+
0x684: 68,
|
| 176 |
+
0x685: 68,
|
| 177 |
+
0x686: 68,
|
| 178 |
+
0x687: 68,
|
| 179 |
+
0x688: 82,
|
| 180 |
+
0x689: 82,
|
| 181 |
+
0x68a: 82,
|
| 182 |
+
0x68b: 82,
|
| 183 |
+
0x68c: 82,
|
| 184 |
+
0x68d: 82,
|
| 185 |
+
0x68e: 82,
|
| 186 |
+
0x68f: 82,
|
| 187 |
+
0x690: 82,
|
| 188 |
+
0x691: 82,
|
| 189 |
+
0x692: 82,
|
| 190 |
+
0x693: 82,
|
| 191 |
+
0x694: 82,
|
| 192 |
+
0x695: 82,
|
| 193 |
+
0x696: 82,
|
| 194 |
+
0x697: 82,
|
| 195 |
+
0x698: 82,
|
| 196 |
+
0x699: 82,
|
| 197 |
+
0x69a: 68,
|
| 198 |
+
0x69b: 68,
|
| 199 |
+
0x69c: 68,
|
| 200 |
+
0x69d: 68,
|
| 201 |
+
0x69e: 68,
|
| 202 |
+
0x69f: 68,
|
| 203 |
+
0x6a0: 68,
|
| 204 |
+
0x6a1: 68,
|
| 205 |
+
0x6a2: 68,
|
| 206 |
+
0x6a3: 68,
|
| 207 |
+
0x6a4: 68,
|
| 208 |
+
0x6a5: 68,
|
| 209 |
+
0x6a6: 68,
|
| 210 |
+
0x6a7: 68,
|
| 211 |
+
0x6a8: 68,
|
| 212 |
+
0x6a9: 68,
|
| 213 |
+
0x6aa: 68,
|
| 214 |
+
0x6ab: 68,
|
| 215 |
+
0x6ac: 68,
|
| 216 |
+
0x6ad: 68,
|
| 217 |
+
0x6ae: 68,
|
| 218 |
+
0x6af: 68,
|
| 219 |
+
0x6b0: 68,
|
| 220 |
+
0x6b1: 68,
|
| 221 |
+
0x6b2: 68,
|
| 222 |
+
0x6b3: 68,
|
| 223 |
+
0x6b4: 68,
|
| 224 |
+
0x6b5: 68,
|
| 225 |
+
0x6b6: 68,
|
| 226 |
+
0x6b7: 68,
|
| 227 |
+
0x6b8: 68,
|
| 228 |
+
0x6b9: 68,
|
| 229 |
+
0x6ba: 68,
|
| 230 |
+
0x6bb: 68,
|
| 231 |
+
0x6bc: 68,
|
| 232 |
+
0x6bd: 68,
|
| 233 |
+
0x6be: 68,
|
| 234 |
+
0x6bf: 68,
|
| 235 |
+
0x6c0: 82,
|
| 236 |
+
0x6c1: 68,
|
| 237 |
+
0x6c2: 68,
|
| 238 |
+
0x6c3: 82,
|
| 239 |
+
0x6c4: 82,
|
| 240 |
+
0x6c5: 82,
|
| 241 |
+
0x6c6: 82,
|
| 242 |
+
0x6c7: 82,
|
| 243 |
+
0x6c8: 82,
|
| 244 |
+
0x6c9: 82,
|
| 245 |
+
0x6ca: 82,
|
| 246 |
+
0x6cb: 82,
|
| 247 |
+
0x6cc: 68,
|
| 248 |
+
0x6cd: 82,
|
| 249 |
+
0x6ce: 68,
|
| 250 |
+
0x6cf: 82,
|
| 251 |
+
0x6d0: 68,
|
| 252 |
+
0x6d1: 68,
|
| 253 |
+
0x6d2: 82,
|
| 254 |
+
0x6d3: 82,
|
| 255 |
+
0x6d5: 82,
|
| 256 |
+
0x6dd: 85,
|
| 257 |
+
0x6ee: 82,
|
| 258 |
+
0x6ef: 82,
|
| 259 |
+
0x6fa: 68,
|
| 260 |
+
0x6fb: 68,
|
| 261 |
+
0x6fc: 68,
|
| 262 |
+
0x6ff: 68,
|
| 263 |
+
0x70f: 84,
|
| 264 |
+
0x710: 82,
|
| 265 |
+
0x712: 68,
|
| 266 |
+
0x713: 68,
|
| 267 |
+
0x714: 68,
|
| 268 |
+
0x715: 82,
|
| 269 |
+
0x716: 82,
|
| 270 |
+
0x717: 82,
|
| 271 |
+
0x718: 82,
|
| 272 |
+
0x719: 82,
|
| 273 |
+
0x71a: 68,
|
| 274 |
+
0x71b: 68,
|
| 275 |
+
0x71c: 68,
|
| 276 |
+
0x71d: 68,
|
| 277 |
+
0x71e: 82,
|
| 278 |
+
0x71f: 68,
|
| 279 |
+
0x720: 68,
|
| 280 |
+
0x721: 68,
|
| 281 |
+
0x722: 68,
|
| 282 |
+
0x723: 68,
|
| 283 |
+
0x724: 68,
|
| 284 |
+
0x725: 68,
|
| 285 |
+
0x726: 68,
|
| 286 |
+
0x727: 68,
|
| 287 |
+
0x728: 82,
|
| 288 |
+
0x729: 68,
|
| 289 |
+
0x72a: 82,
|
| 290 |
+
0x72b: 68,
|
| 291 |
+
0x72c: 82,
|
| 292 |
+
0x72d: 68,
|
| 293 |
+
0x72e: 68,
|
| 294 |
+
0x72f: 82,
|
| 295 |
+
0x74d: 82,
|
| 296 |
+
0x74e: 68,
|
| 297 |
+
0x74f: 68,
|
| 298 |
+
0x750: 68,
|
| 299 |
+
0x751: 68,
|
| 300 |
+
0x752: 68,
|
| 301 |
+
0x753: 68,
|
| 302 |
+
0x754: 68,
|
| 303 |
+
0x755: 68,
|
| 304 |
+
0x756: 68,
|
| 305 |
+
0x757: 68,
|
| 306 |
+
0x758: 68,
|
| 307 |
+
0x759: 82,
|
| 308 |
+
0x75a: 82,
|
| 309 |
+
0x75b: 82,
|
| 310 |
+
0x75c: 68,
|
| 311 |
+
0x75d: 68,
|
| 312 |
+
0x75e: 68,
|
| 313 |
+
0x75f: 68,
|
| 314 |
+
0x760: 68,
|
| 315 |
+
0x761: 68,
|
| 316 |
+
0x762: 68,
|
| 317 |
+
0x763: 68,
|
| 318 |
+
0x764: 68,
|
| 319 |
+
0x765: 68,
|
| 320 |
+
0x766: 68,
|
| 321 |
+
0x767: 68,
|
| 322 |
+
0x768: 68,
|
| 323 |
+
0x769: 68,
|
| 324 |
+
0x76a: 68,
|
| 325 |
+
0x76b: 82,
|
| 326 |
+
0x76c: 82,
|
| 327 |
+
0x76d: 68,
|
| 328 |
+
0x76e: 68,
|
| 329 |
+
0x76f: 68,
|
| 330 |
+
0x770: 68,
|
| 331 |
+
0x771: 82,
|
| 332 |
+
0x772: 68,
|
| 333 |
+
0x773: 82,
|
| 334 |
+
0x774: 82,
|
| 335 |
+
0x775: 68,
|
| 336 |
+
0x776: 68,
|
| 337 |
+
0x777: 68,
|
| 338 |
+
0x778: 82,
|
| 339 |
+
0x779: 82,
|
| 340 |
+
0x77a: 68,
|
| 341 |
+
0x77b: 68,
|
| 342 |
+
0x77c: 68,
|
| 343 |
+
0x77d: 68,
|
| 344 |
+
0x77e: 68,
|
| 345 |
+
0x77f: 68,
|
| 346 |
+
0x7ca: 68,
|
| 347 |
+
0x7cb: 68,
|
| 348 |
+
0x7cc: 68,
|
| 349 |
+
0x7cd: 68,
|
| 350 |
+
0x7ce: 68,
|
| 351 |
+
0x7cf: 68,
|
| 352 |
+
0x7d0: 68,
|
| 353 |
+
0x7d1: 68,
|
| 354 |
+
0x7d2: 68,
|
| 355 |
+
0x7d3: 68,
|
| 356 |
+
0x7d4: 68,
|
| 357 |
+
0x7d5: 68,
|
| 358 |
+
0x7d6: 68,
|
| 359 |
+
0x7d7: 68,
|
| 360 |
+
0x7d8: 68,
|
| 361 |
+
0x7d9: 68,
|
| 362 |
+
0x7da: 68,
|
| 363 |
+
0x7db: 68,
|
| 364 |
+
0x7dc: 68,
|
| 365 |
+
0x7dd: 68,
|
| 366 |
+
0x7de: 68,
|
| 367 |
+
0x7df: 68,
|
| 368 |
+
0x7e0: 68,
|
| 369 |
+
0x7e1: 68,
|
| 370 |
+
0x7e2: 68,
|
| 371 |
+
0x7e3: 68,
|
| 372 |
+
0x7e4: 68,
|
| 373 |
+
0x7e5: 68,
|
| 374 |
+
0x7e6: 68,
|
| 375 |
+
0x7e7: 68,
|
| 376 |
+
0x7e8: 68,
|
| 377 |
+
0x7e9: 68,
|
| 378 |
+
0x7ea: 68,
|
| 379 |
+
0x7fa: 67,
|
| 380 |
+
0x840: 82,
|
| 381 |
+
0x841: 68,
|
| 382 |
+
0x842: 68,
|
| 383 |
+
0x843: 68,
|
| 384 |
+
0x844: 68,
|
| 385 |
+
0x845: 68,
|
| 386 |
+
0x846: 82,
|
| 387 |
+
0x847: 82,
|
| 388 |
+
0x848: 68,
|
| 389 |
+
0x849: 82,
|
| 390 |
+
0x84a: 68,
|
| 391 |
+
0x84b: 68,
|
| 392 |
+
0x84c: 68,
|
| 393 |
+
0x84d: 68,
|
| 394 |
+
0x84e: 68,
|
| 395 |
+
0x84f: 68,
|
| 396 |
+
0x850: 68,
|
| 397 |
+
0x851: 68,
|
| 398 |
+
0x852: 68,
|
| 399 |
+
0x853: 68,
|
| 400 |
+
0x854: 82,
|
| 401 |
+
0x855: 68,
|
| 402 |
+
0x856: 82,
|
| 403 |
+
0x857: 82,
|
| 404 |
+
0x858: 82,
|
| 405 |
+
0x860: 68,
|
| 406 |
+
0x861: 85,
|
| 407 |
+
0x862: 68,
|
| 408 |
+
0x863: 68,
|
| 409 |
+
0x864: 68,
|
| 410 |
+
0x865: 68,
|
| 411 |
+
0x866: 85,
|
| 412 |
+
0x867: 82,
|
| 413 |
+
0x868: 68,
|
| 414 |
+
0x869: 82,
|
| 415 |
+
0x86a: 82,
|
| 416 |
+
0x870: 82,
|
| 417 |
+
0x871: 82,
|
| 418 |
+
0x872: 82,
|
| 419 |
+
0x873: 82,
|
| 420 |
+
0x874: 82,
|
| 421 |
+
0x875: 82,
|
| 422 |
+
0x876: 82,
|
| 423 |
+
0x877: 82,
|
| 424 |
+
0x878: 82,
|
| 425 |
+
0x879: 82,
|
| 426 |
+
0x87a: 82,
|
| 427 |
+
0x87b: 82,
|
| 428 |
+
0x87c: 82,
|
| 429 |
+
0x87d: 82,
|
| 430 |
+
0x87e: 82,
|
| 431 |
+
0x87f: 82,
|
| 432 |
+
0x880: 82,
|
| 433 |
+
0x881: 82,
|
| 434 |
+
0x882: 82,
|
| 435 |
+
0x883: 67,
|
| 436 |
+
0x884: 67,
|
| 437 |
+
0x885: 67,
|
| 438 |
+
0x886: 68,
|
| 439 |
+
0x887: 85,
|
| 440 |
+
0x888: 85,
|
| 441 |
+
0x889: 68,
|
| 442 |
+
0x88a: 68,
|
| 443 |
+
0x88b: 68,
|
| 444 |
+
0x88c: 68,
|
| 445 |
+
0x88d: 68,
|
| 446 |
+
0x88e: 82,
|
| 447 |
+
0x890: 85,
|
| 448 |
+
0x891: 85,
|
| 449 |
+
0x8a0: 68,
|
| 450 |
+
0x8a1: 68,
|
| 451 |
+
0x8a2: 68,
|
| 452 |
+
0x8a3: 68,
|
| 453 |
+
0x8a4: 68,
|
| 454 |
+
0x8a5: 68,
|
| 455 |
+
0x8a6: 68,
|
| 456 |
+
0x8a7: 68,
|
| 457 |
+
0x8a8: 68,
|
| 458 |
+
0x8a9: 68,
|
| 459 |
+
0x8aa: 82,
|
| 460 |
+
0x8ab: 82,
|
| 461 |
+
0x8ac: 82,
|
| 462 |
+
0x8ad: 85,
|
| 463 |
+
0x8ae: 82,
|
| 464 |
+
0x8af: 68,
|
| 465 |
+
0x8b0: 68,
|
| 466 |
+
0x8b1: 82,
|
| 467 |
+
0x8b2: 82,
|
| 468 |
+
0x8b3: 68,
|
| 469 |
+
0x8b4: 68,
|
| 470 |
+
0x8b5: 68,
|
| 471 |
+
0x8b6: 68,
|
| 472 |
+
0x8b7: 68,
|
| 473 |
+
0x8b8: 68,
|
| 474 |
+
0x8b9: 82,
|
| 475 |
+
0x8ba: 68,
|
| 476 |
+
0x8bb: 68,
|
| 477 |
+
0x8bc: 68,
|
| 478 |
+
0x8bd: 68,
|
| 479 |
+
0x8be: 68,
|
| 480 |
+
0x8bf: 68,
|
| 481 |
+
0x8c0: 68,
|
| 482 |
+
0x8c1: 68,
|
| 483 |
+
0x8c2: 68,
|
| 484 |
+
0x8c3: 68,
|
| 485 |
+
0x8c4: 68,
|
| 486 |
+
0x8c5: 68,
|
| 487 |
+
0x8c6: 68,
|
| 488 |
+
0x8c7: 68,
|
| 489 |
+
0x8c8: 68,
|
| 490 |
+
0x8e2: 85,
|
| 491 |
+
0x1806: 85,
|
| 492 |
+
0x1807: 68,
|
| 493 |
+
0x180a: 67,
|
| 494 |
+
0x180e: 85,
|
| 495 |
+
0x1820: 68,
|
| 496 |
+
0x1821: 68,
|
| 497 |
+
0x1822: 68,
|
| 498 |
+
0x1823: 68,
|
| 499 |
+
0x1824: 68,
|
| 500 |
+
0x1825: 68,
|
| 501 |
+
0x1826: 68,
|
| 502 |
+
0x1827: 68,
|
| 503 |
+
0x1828: 68,
|
| 504 |
+
0x1829: 68,
|
| 505 |
+
0x182a: 68,
|
| 506 |
+
0x182b: 68,
|
| 507 |
+
0x182c: 68,
|
| 508 |
+
0x182d: 68,
|
| 509 |
+
0x182e: 68,
|
| 510 |
+
0x182f: 68,
|
| 511 |
+
0x1830: 68,
|
| 512 |
+
0x1831: 68,
|
| 513 |
+
0x1832: 68,
|
| 514 |
+
0x1833: 68,
|
| 515 |
+
0x1834: 68,
|
| 516 |
+
0x1835: 68,
|
| 517 |
+
0x1836: 68,
|
| 518 |
+
0x1837: 68,
|
| 519 |
+
0x1838: 68,
|
| 520 |
+
0x1839: 68,
|
| 521 |
+
0x183a: 68,
|
| 522 |
+
0x183b: 68,
|
| 523 |
+
0x183c: 68,
|
| 524 |
+
0x183d: 68,
|
| 525 |
+
0x183e: 68,
|
| 526 |
+
0x183f: 68,
|
| 527 |
+
0x1840: 68,
|
| 528 |
+
0x1841: 68,
|
| 529 |
+
0x1842: 68,
|
| 530 |
+
0x1843: 68,
|
| 531 |
+
0x1844: 68,
|
| 532 |
+
0x1845: 68,
|
| 533 |
+
0x1846: 68,
|
| 534 |
+
0x1847: 68,
|
| 535 |
+
0x1848: 68,
|
| 536 |
+
0x1849: 68,
|
| 537 |
+
0x184a: 68,
|
| 538 |
+
0x184b: 68,
|
| 539 |
+
0x184c: 68,
|
| 540 |
+
0x184d: 68,
|
| 541 |
+
0x184e: 68,
|
| 542 |
+
0x184f: 68,
|
| 543 |
+
0x1850: 68,
|
| 544 |
+
0x1851: 68,
|
| 545 |
+
0x1852: 68,
|
| 546 |
+
0x1853: 68,
|
| 547 |
+
0x1854: 68,
|
| 548 |
+
0x1855: 68,
|
| 549 |
+
0x1856: 68,
|
| 550 |
+
0x1857: 68,
|
| 551 |
+
0x1858: 68,
|
| 552 |
+
0x1859: 68,
|
| 553 |
+
0x185a: 68,
|
| 554 |
+
0x185b: 68,
|
| 555 |
+
0x185c: 68,
|
| 556 |
+
0x185d: 68,
|
| 557 |
+
0x185e: 68,
|
| 558 |
+
0x185f: 68,
|
| 559 |
+
0x1860: 68,
|
| 560 |
+
0x1861: 68,
|
| 561 |
+
0x1862: 68,
|
| 562 |
+
0x1863: 68,
|
| 563 |
+
0x1864: 68,
|
| 564 |
+
0x1865: 68,
|
| 565 |
+
0x1866: 68,
|
| 566 |
+
0x1867: 68,
|
| 567 |
+
0x1868: 68,
|
| 568 |
+
0x1869: 68,
|
| 569 |
+
0x186a: 68,
|
| 570 |
+
0x186b: 68,
|
| 571 |
+
0x186c: 68,
|
| 572 |
+
0x186d: 68,
|
| 573 |
+
0x186e: 68,
|
| 574 |
+
0x186f: 68,
|
| 575 |
+
0x1870: 68,
|
| 576 |
+
0x1871: 68,
|
| 577 |
+
0x1872: 68,
|
| 578 |
+
0x1873: 68,
|
| 579 |
+
0x1874: 68,
|
| 580 |
+
0x1875: 68,
|
| 581 |
+
0x1876: 68,
|
| 582 |
+
0x1877: 68,
|
| 583 |
+
0x1878: 68,
|
| 584 |
+
0x1880: 85,
|
| 585 |
+
0x1881: 85,
|
| 586 |
+
0x1882: 85,
|
| 587 |
+
0x1883: 85,
|
| 588 |
+
0x1884: 85,
|
| 589 |
+
0x1885: 84,
|
| 590 |
+
0x1886: 84,
|
| 591 |
+
0x1887: 68,
|
| 592 |
+
0x1888: 68,
|
| 593 |
+
0x1889: 68,
|
| 594 |
+
0x188a: 68,
|
| 595 |
+
0x188b: 68,
|
| 596 |
+
0x188c: 68,
|
| 597 |
+
0x188d: 68,
|
| 598 |
+
0x188e: 68,
|
| 599 |
+
0x188f: 68,
|
| 600 |
+
0x1890: 68,
|
| 601 |
+
0x1891: 68,
|
| 602 |
+
0x1892: 68,
|
| 603 |
+
0x1893: 68,
|
| 604 |
+
0x1894: 68,
|
| 605 |
+
0x1895: 68,
|
| 606 |
+
0x1896: 68,
|
| 607 |
+
0x1897: 68,
|
| 608 |
+
0x1898: 68,
|
| 609 |
+
0x1899: 68,
|
| 610 |
+
0x189a: 68,
|
| 611 |
+
0x189b: 68,
|
| 612 |
+
0x189c: 68,
|
| 613 |
+
0x189d: 68,
|
| 614 |
+
0x189e: 68,
|
| 615 |
+
0x189f: 68,
|
| 616 |
+
0x18a0: 68,
|
| 617 |
+
0x18a1: 68,
|
| 618 |
+
0x18a2: 68,
|
| 619 |
+
0x18a3: 68,
|
| 620 |
+
0x18a4: 68,
|
| 621 |
+
0x18a5: 68,
|
| 622 |
+
0x18a6: 68,
|
| 623 |
+
0x18a7: 68,
|
| 624 |
+
0x18a8: 68,
|
| 625 |
+
0x18aa: 68,
|
| 626 |
+
0x200c: 85,
|
| 627 |
+
0x200d: 67,
|
| 628 |
+
0x202f: 85,
|
| 629 |
+
0x2066: 85,
|
| 630 |
+
0x2067: 85,
|
| 631 |
+
0x2068: 85,
|
| 632 |
+
0x2069: 85,
|
| 633 |
+
0xa840: 68,
|
| 634 |
+
0xa841: 68,
|
| 635 |
+
0xa842: 68,
|
| 636 |
+
0xa843: 68,
|
| 637 |
+
0xa844: 68,
|
| 638 |
+
0xa845: 68,
|
| 639 |
+
0xa846: 68,
|
| 640 |
+
0xa847: 68,
|
| 641 |
+
0xa848: 68,
|
| 642 |
+
0xa849: 68,
|
| 643 |
+
0xa84a: 68,
|
| 644 |
+
0xa84b: 68,
|
| 645 |
+
0xa84c: 68,
|
| 646 |
+
0xa84d: 68,
|
| 647 |
+
0xa84e: 68,
|
| 648 |
+
0xa84f: 68,
|
| 649 |
+
0xa850: 68,
|
| 650 |
+
0xa851: 68,
|
| 651 |
+
0xa852: 68,
|
| 652 |
+
0xa853: 68,
|
| 653 |
+
0xa854: 68,
|
| 654 |
+
0xa855: 68,
|
| 655 |
+
0xa856: 68,
|
| 656 |
+
0xa857: 68,
|
| 657 |
+
0xa858: 68,
|
| 658 |
+
0xa859: 68,
|
| 659 |
+
0xa85a: 68,
|
| 660 |
+
0xa85b: 68,
|
| 661 |
+
0xa85c: 68,
|
| 662 |
+
0xa85d: 68,
|
| 663 |
+
0xa85e: 68,
|
| 664 |
+
0xa85f: 68,
|
| 665 |
+
0xa860: 68,
|
| 666 |
+
0xa861: 68,
|
| 667 |
+
0xa862: 68,
|
| 668 |
+
0xa863: 68,
|
| 669 |
+
0xa864: 68,
|
| 670 |
+
0xa865: 68,
|
| 671 |
+
0xa866: 68,
|
| 672 |
+
0xa867: 68,
|
| 673 |
+
0xa868: 68,
|
| 674 |
+
0xa869: 68,
|
| 675 |
+
0xa86a: 68,
|
| 676 |
+
0xa86b: 68,
|
| 677 |
+
0xa86c: 68,
|
| 678 |
+
0xa86d: 68,
|
| 679 |
+
0xa86e: 68,
|
| 680 |
+
0xa86f: 68,
|
| 681 |
+
0xa870: 68,
|
| 682 |
+
0xa871: 68,
|
| 683 |
+
0xa872: 76,
|
| 684 |
+
0xa873: 85,
|
| 685 |
+
0x10ac0: 68,
|
| 686 |
+
0x10ac1: 68,
|
| 687 |
+
0x10ac2: 68,
|
| 688 |
+
0x10ac3: 68,
|
| 689 |
+
0x10ac4: 68,
|
| 690 |
+
0x10ac5: 82,
|
| 691 |
+
0x10ac6: 85,
|
| 692 |
+
0x10ac7: 82,
|
| 693 |
+
0x10ac8: 85,
|
| 694 |
+
0x10ac9: 82,
|
| 695 |
+
0x10aca: 82,
|
| 696 |
+
0x10acb: 85,
|
| 697 |
+
0x10acc: 85,
|
| 698 |
+
0x10acd: 76,
|
| 699 |
+
0x10ace: 82,
|
| 700 |
+
0x10acf: 82,
|
| 701 |
+
0x10ad0: 82,
|
| 702 |
+
0x10ad1: 82,
|
| 703 |
+
0x10ad2: 82,
|
| 704 |
+
0x10ad3: 68,
|
| 705 |
+
0x10ad4: 68,
|
| 706 |
+
0x10ad5: 68,
|
| 707 |
+
0x10ad6: 68,
|
| 708 |
+
0x10ad7: 76,
|
| 709 |
+
0x10ad8: 68,
|
| 710 |
+
0x10ad9: 68,
|
| 711 |
+
0x10ada: 68,
|
| 712 |
+
0x10adb: 68,
|
| 713 |
+
0x10adc: 68,
|
| 714 |
+
0x10add: 82,
|
| 715 |
+
0x10ade: 68,
|
| 716 |
+
0x10adf: 68,
|
| 717 |
+
0x10ae0: 68,
|
| 718 |
+
0x10ae1: 82,
|
| 719 |
+
0x10ae2: 85,
|
| 720 |
+
0x10ae3: 85,
|
| 721 |
+
0x10ae4: 82,
|
| 722 |
+
0x10aeb: 68,
|
| 723 |
+
0x10aec: 68,
|
| 724 |
+
0x10aed: 68,
|
| 725 |
+
0x10aee: 68,
|
| 726 |
+
0x10aef: 82,
|
| 727 |
+
0x10b80: 68,
|
| 728 |
+
0x10b81: 82,
|
| 729 |
+
0x10b82: 68,
|
| 730 |
+
0x10b83: 82,
|
| 731 |
+
0x10b84: 82,
|
| 732 |
+
0x10b85: 82,
|
| 733 |
+
0x10b86: 68,
|
| 734 |
+
0x10b87: 68,
|
| 735 |
+
0x10b88: 68,
|
| 736 |
+
0x10b89: 82,
|
| 737 |
+
0x10b8a: 68,
|
| 738 |
+
0x10b8b: 68,
|
| 739 |
+
0x10b8c: 82,
|
| 740 |
+
0x10b8d: 68,
|
| 741 |
+
0x10b8e: 82,
|
| 742 |
+
0x10b8f: 82,
|
| 743 |
+
0x10b90: 68,
|
| 744 |
+
0x10b91: 82,
|
| 745 |
+
0x10ba9: 82,
|
| 746 |
+
0x10baa: 82,
|
| 747 |
+
0x10bab: 82,
|
| 748 |
+
0x10bac: 82,
|
| 749 |
+
0x10bad: 68,
|
| 750 |
+
0x10bae: 68,
|
| 751 |
+
0x10baf: 85,
|
| 752 |
+
0x10d00: 76,
|
| 753 |
+
0x10d01: 68,
|
| 754 |
+
0x10d02: 68,
|
| 755 |
+
0x10d03: 68,
|
| 756 |
+
0x10d04: 68,
|
| 757 |
+
0x10d05: 68,
|
| 758 |
+
0x10d06: 68,
|
| 759 |
+
0x10d07: 68,
|
| 760 |
+
0x10d08: 68,
|
| 761 |
+
0x10d09: 68,
|
| 762 |
+
0x10d0a: 68,
|
| 763 |
+
0x10d0b: 68,
|
| 764 |
+
0x10d0c: 68,
|
| 765 |
+
0x10d0d: 68,
|
| 766 |
+
0x10d0e: 68,
|
| 767 |
+
0x10d0f: 68,
|
| 768 |
+
0x10d10: 68,
|
| 769 |
+
0x10d11: 68,
|
| 770 |
+
0x10d12: 68,
|
| 771 |
+
0x10d13: 68,
|
| 772 |
+
0x10d14: 68,
|
| 773 |
+
0x10d15: 68,
|
| 774 |
+
0x10d16: 68,
|
| 775 |
+
0x10d17: 68,
|
| 776 |
+
0x10d18: 68,
|
| 777 |
+
0x10d19: 68,
|
| 778 |
+
0x10d1a: 68,
|
| 779 |
+
0x10d1b: 68,
|
| 780 |
+
0x10d1c: 68,
|
| 781 |
+
0x10d1d: 68,
|
| 782 |
+
0x10d1e: 68,
|
| 783 |
+
0x10d1f: 68,
|
| 784 |
+
0x10d20: 68,
|
| 785 |
+
0x10d21: 68,
|
| 786 |
+
0x10d22: 82,
|
| 787 |
+
0x10d23: 68,
|
| 788 |
+
0x10f30: 68,
|
| 789 |
+
0x10f31: 68,
|
| 790 |
+
0x10f32: 68,
|
| 791 |
+
0x10f33: 82,
|
| 792 |
+
0x10f34: 68,
|
| 793 |
+
0x10f35: 68,
|
| 794 |
+
0x10f36: 68,
|
| 795 |
+
0x10f37: 68,
|
| 796 |
+
0x10f38: 68,
|
| 797 |
+
0x10f39: 68,
|
| 798 |
+
0x10f3a: 68,
|
| 799 |
+
0x10f3b: 68,
|
| 800 |
+
0x10f3c: 68,
|
| 801 |
+
0x10f3d: 68,
|
| 802 |
+
0x10f3e: 68,
|
| 803 |
+
0x10f3f: 68,
|
| 804 |
+
0x10f40: 68,
|
| 805 |
+
0x10f41: 68,
|
| 806 |
+
0x10f42: 68,
|
| 807 |
+
0x10f43: 68,
|
| 808 |
+
0x10f44: 68,
|
| 809 |
+
0x10f45: 85,
|
| 810 |
+
0x10f51: 68,
|
| 811 |
+
0x10f52: 68,
|
| 812 |
+
0x10f53: 68,
|
| 813 |
+
0x10f54: 82,
|
| 814 |
+
0x10f70: 68,
|
| 815 |
+
0x10f71: 68,
|
| 816 |
+
0x10f72: 68,
|
| 817 |
+
0x10f73: 68,
|
| 818 |
+
0x10f74: 82,
|
| 819 |
+
0x10f75: 82,
|
| 820 |
+
0x10f76: 68,
|
| 821 |
+
0x10f77: 68,
|
| 822 |
+
0x10f78: 68,
|
| 823 |
+
0x10f79: 68,
|
| 824 |
+
0x10f7a: 68,
|
| 825 |
+
0x10f7b: 68,
|
| 826 |
+
0x10f7c: 68,
|
| 827 |
+
0x10f7d: 68,
|
| 828 |
+
0x10f7e: 68,
|
| 829 |
+
0x10f7f: 68,
|
| 830 |
+
0x10f80: 68,
|
| 831 |
+
0x10f81: 68,
|
| 832 |
+
0x10fb0: 68,
|
| 833 |
+
0x10fb1: 85,
|
| 834 |
+
0x10fb2: 68,
|
| 835 |
+
0x10fb3: 68,
|
| 836 |
+
0x10fb4: 82,
|
| 837 |
+
0x10fb5: 82,
|
| 838 |
+
0x10fb6: 82,
|
| 839 |
+
0x10fb7: 85,
|
| 840 |
+
0x10fb8: 68,
|
| 841 |
+
0x10fb9: 82,
|
| 842 |
+
0x10fba: 82,
|
| 843 |
+
0x10fbb: 68,
|
| 844 |
+
0x10fbc: 68,
|
| 845 |
+
0x10fbd: 82,
|
| 846 |
+
0x10fbe: 68,
|
| 847 |
+
0x10fbf: 68,
|
| 848 |
+
0x10fc0: 85,
|
| 849 |
+
0x10fc1: 68,
|
| 850 |
+
0x10fc2: 82,
|
| 851 |
+
0x10fc3: 82,
|
| 852 |
+
0x10fc4: 68,
|
| 853 |
+
0x10fc5: 85,
|
| 854 |
+
0x10fc6: 85,
|
| 855 |
+
0x10fc7: 85,
|
| 856 |
+
0x10fc8: 85,
|
| 857 |
+
0x10fc9: 82,
|
| 858 |
+
0x10fca: 68,
|
| 859 |
+
0x10fcb: 76,
|
| 860 |
+
0x110bd: 85,
|
| 861 |
+
0x110cd: 85,
|
| 862 |
+
0x1e900: 68,
|
| 863 |
+
0x1e901: 68,
|
| 864 |
+
0x1e902: 68,
|
| 865 |
+
0x1e903: 68,
|
| 866 |
+
0x1e904: 68,
|
| 867 |
+
0x1e905: 68,
|
| 868 |
+
0x1e906: 68,
|
| 869 |
+
0x1e907: 68,
|
| 870 |
+
0x1e908: 68,
|
| 871 |
+
0x1e909: 68,
|
| 872 |
+
0x1e90a: 68,
|
| 873 |
+
0x1e90b: 68,
|
| 874 |
+
0x1e90c: 68,
|
| 875 |
+
0x1e90d: 68,
|
| 876 |
+
0x1e90e: 68,
|
| 877 |
+
0x1e90f: 68,
|
| 878 |
+
0x1e910: 68,
|
| 879 |
+
0x1e911: 68,
|
| 880 |
+
0x1e912: 68,
|
| 881 |
+
0x1e913: 68,
|
| 882 |
+
0x1e914: 68,
|
| 883 |
+
0x1e915: 68,
|
| 884 |
+
0x1e916: 68,
|
| 885 |
+
0x1e917: 68,
|
| 886 |
+
0x1e918: 68,
|
| 887 |
+
0x1e919: 68,
|
| 888 |
+
0x1e91a: 68,
|
| 889 |
+
0x1e91b: 68,
|
| 890 |
+
0x1e91c: 68,
|
| 891 |
+
0x1e91d: 68,
|
| 892 |
+
0x1e91e: 68,
|
| 893 |
+
0x1e91f: 68,
|
| 894 |
+
0x1e920: 68,
|
| 895 |
+
0x1e921: 68,
|
| 896 |
+
0x1e922: 68,
|
| 897 |
+
0x1e923: 68,
|
| 898 |
+
0x1e924: 68,
|
| 899 |
+
0x1e925: 68,
|
| 900 |
+
0x1e926: 68,
|
| 901 |
+
0x1e927: 68,
|
| 902 |
+
0x1e928: 68,
|
| 903 |
+
0x1e929: 68,
|
| 904 |
+
0x1e92a: 68,
|
| 905 |
+
0x1e92b: 68,
|
| 906 |
+
0x1e92c: 68,
|
| 907 |
+
0x1e92d: 68,
|
| 908 |
+
0x1e92e: 68,
|
| 909 |
+
0x1e92f: 68,
|
| 910 |
+
0x1e930: 68,
|
| 911 |
+
0x1e931: 68,
|
| 912 |
+
0x1e932: 68,
|
| 913 |
+
0x1e933: 68,
|
| 914 |
+
0x1e934: 68,
|
| 915 |
+
0x1e935: 68,
|
| 916 |
+
0x1e936: 68,
|
| 917 |
+
0x1e937: 68,
|
| 918 |
+
0x1e938: 68,
|
| 919 |
+
0x1e939: 68,
|
| 920 |
+
0x1e93a: 68,
|
| 921 |
+
0x1e93b: 68,
|
| 922 |
+
0x1e93c: 68,
|
| 923 |
+
0x1e93d: 68,
|
| 924 |
+
0x1e93e: 68,
|
| 925 |
+
0x1e93f: 68,
|
| 926 |
+
0x1e940: 68,
|
| 927 |
+
0x1e941: 68,
|
| 928 |
+
0x1e942: 68,
|
| 929 |
+
0x1e943: 68,
|
| 930 |
+
0x1e94b: 84,
|
| 931 |
+
}
|
| 932 |
+
codepoint_classes = {
|
| 933 |
+
'PVALID': (
|
| 934 |
+
0x2d0000002e,
|
| 935 |
+
0x300000003a,
|
| 936 |
+
0x610000007b,
|
| 937 |
+
0xdf000000f7,
|
| 938 |
+
0xf800000100,
|
| 939 |
+
0x10100000102,
|
| 940 |
+
0x10300000104,
|
| 941 |
+
0x10500000106,
|
| 942 |
+
0x10700000108,
|
| 943 |
+
0x1090000010a,
|
| 944 |
+
0x10b0000010c,
|
| 945 |
+
0x10d0000010e,
|
| 946 |
+
0x10f00000110,
|
| 947 |
+
0x11100000112,
|
| 948 |
+
0x11300000114,
|
| 949 |
+
0x11500000116,
|
| 950 |
+
0x11700000118,
|
| 951 |
+
0x1190000011a,
|
| 952 |
+
0x11b0000011c,
|
| 953 |
+
0x11d0000011e,
|
| 954 |
+
0x11f00000120,
|
| 955 |
+
0x12100000122,
|
| 956 |
+
0x12300000124,
|
| 957 |
+
0x12500000126,
|
| 958 |
+
0x12700000128,
|
| 959 |
+
0x1290000012a,
|
| 960 |
+
0x12b0000012c,
|
| 961 |
+
0x12d0000012e,
|
| 962 |
+
0x12f00000130,
|
| 963 |
+
0x13100000132,
|
| 964 |
+
0x13500000136,
|
| 965 |
+
0x13700000139,
|
| 966 |
+
0x13a0000013b,
|
| 967 |
+
0x13c0000013d,
|
| 968 |
+
0x13e0000013f,
|
| 969 |
+
0x14200000143,
|
| 970 |
+
0x14400000145,
|
| 971 |
+
0x14600000147,
|
| 972 |
+
0x14800000149,
|
| 973 |
+
0x14b0000014c,
|
| 974 |
+
0x14d0000014e,
|
| 975 |
+
0x14f00000150,
|
| 976 |
+
0x15100000152,
|
| 977 |
+
0x15300000154,
|
| 978 |
+
0x15500000156,
|
| 979 |
+
0x15700000158,
|
| 980 |
+
0x1590000015a,
|
| 981 |
+
0x15b0000015c,
|
| 982 |
+
0x15d0000015e,
|
| 983 |
+
0x15f00000160,
|
| 984 |
+
0x16100000162,
|
| 985 |
+
0x16300000164,
|
| 986 |
+
0x16500000166,
|
| 987 |
+
0x16700000168,
|
| 988 |
+
0x1690000016a,
|
| 989 |
+
0x16b0000016c,
|
| 990 |
+
0x16d0000016e,
|
| 991 |
+
0x16f00000170,
|
| 992 |
+
0x17100000172,
|
| 993 |
+
0x17300000174,
|
| 994 |
+
0x17500000176,
|
| 995 |
+
0x17700000178,
|
| 996 |
+
0x17a0000017b,
|
| 997 |
+
0x17c0000017d,
|
| 998 |
+
0x17e0000017f,
|
| 999 |
+
0x18000000181,
|
| 1000 |
+
0x18300000184,
|
| 1001 |
+
0x18500000186,
|
| 1002 |
+
0x18800000189,
|
| 1003 |
+
0x18c0000018e,
|
| 1004 |
+
0x19200000193,
|
| 1005 |
+
0x19500000196,
|
| 1006 |
+
0x1990000019c,
|
| 1007 |
+
0x19e0000019f,
|
| 1008 |
+
0x1a1000001a2,
|
| 1009 |
+
0x1a3000001a4,
|
| 1010 |
+
0x1a5000001a6,
|
| 1011 |
+
0x1a8000001a9,
|
| 1012 |
+
0x1aa000001ac,
|
| 1013 |
+
0x1ad000001ae,
|
| 1014 |
+
0x1b0000001b1,
|
| 1015 |
+
0x1b4000001b5,
|
| 1016 |
+
0x1b6000001b7,
|
| 1017 |
+
0x1b9000001bc,
|
| 1018 |
+
0x1bd000001c4,
|
| 1019 |
+
0x1ce000001cf,
|
| 1020 |
+
0x1d0000001d1,
|
| 1021 |
+
0x1d2000001d3,
|
| 1022 |
+
0x1d4000001d5,
|
| 1023 |
+
0x1d6000001d7,
|
| 1024 |
+
0x1d8000001d9,
|
| 1025 |
+
0x1da000001db,
|
| 1026 |
+
0x1dc000001de,
|
| 1027 |
+
0x1df000001e0,
|
| 1028 |
+
0x1e1000001e2,
|
| 1029 |
+
0x1e3000001e4,
|
| 1030 |
+
0x1e5000001e6,
|
| 1031 |
+
0x1e7000001e8,
|
| 1032 |
+
0x1e9000001ea,
|
| 1033 |
+
0x1eb000001ec,
|
| 1034 |
+
0x1ed000001ee,
|
| 1035 |
+
0x1ef000001f1,
|
| 1036 |
+
0x1f5000001f6,
|
| 1037 |
+
0x1f9000001fa,
|
| 1038 |
+
0x1fb000001fc,
|
| 1039 |
+
0x1fd000001fe,
|
| 1040 |
+
0x1ff00000200,
|
| 1041 |
+
0x20100000202,
|
| 1042 |
+
0x20300000204,
|
| 1043 |
+
0x20500000206,
|
| 1044 |
+
0x20700000208,
|
| 1045 |
+
0x2090000020a,
|
| 1046 |
+
0x20b0000020c,
|
| 1047 |
+
0x20d0000020e,
|
| 1048 |
+
0x20f00000210,
|
| 1049 |
+
0x21100000212,
|
| 1050 |
+
0x21300000214,
|
| 1051 |
+
0x21500000216,
|
| 1052 |
+
0x21700000218,
|
| 1053 |
+
0x2190000021a,
|
| 1054 |
+
0x21b0000021c,
|
| 1055 |
+
0x21d0000021e,
|
| 1056 |
+
0x21f00000220,
|
| 1057 |
+
0x22100000222,
|
| 1058 |
+
0x22300000224,
|
| 1059 |
+
0x22500000226,
|
| 1060 |
+
0x22700000228,
|
| 1061 |
+
0x2290000022a,
|
| 1062 |
+
0x22b0000022c,
|
| 1063 |
+
0x22d0000022e,
|
| 1064 |
+
0x22f00000230,
|
| 1065 |
+
0x23100000232,
|
| 1066 |
+
0x2330000023a,
|
| 1067 |
+
0x23c0000023d,
|
| 1068 |
+
0x23f00000241,
|
| 1069 |
+
0x24200000243,
|
| 1070 |
+
0x24700000248,
|
| 1071 |
+
0x2490000024a,
|
| 1072 |
+
0x24b0000024c,
|
| 1073 |
+
0x24d0000024e,
|
| 1074 |
+
0x24f000002b0,
|
| 1075 |
+
0x2b9000002c2,
|
| 1076 |
+
0x2c6000002d2,
|
| 1077 |
+
0x2ec000002ed,
|
| 1078 |
+
0x2ee000002ef,
|
| 1079 |
+
0x30000000340,
|
| 1080 |
+
0x34200000343,
|
| 1081 |
+
0x3460000034f,
|
| 1082 |
+
0x35000000370,
|
| 1083 |
+
0x37100000372,
|
| 1084 |
+
0x37300000374,
|
| 1085 |
+
0x37700000378,
|
| 1086 |
+
0x37b0000037e,
|
| 1087 |
+
0x39000000391,
|
| 1088 |
+
0x3ac000003cf,
|
| 1089 |
+
0x3d7000003d8,
|
| 1090 |
+
0x3d9000003da,
|
| 1091 |
+
0x3db000003dc,
|
| 1092 |
+
0x3dd000003de,
|
| 1093 |
+
0x3df000003e0,
|
| 1094 |
+
0x3e1000003e2,
|
| 1095 |
+
0x3e3000003e4,
|
| 1096 |
+
0x3e5000003e6,
|
| 1097 |
+
0x3e7000003e8,
|
| 1098 |
+
0x3e9000003ea,
|
| 1099 |
+
0x3eb000003ec,
|
| 1100 |
+
0x3ed000003ee,
|
| 1101 |
+
0x3ef000003f0,
|
| 1102 |
+
0x3f3000003f4,
|
| 1103 |
+
0x3f8000003f9,
|
| 1104 |
+
0x3fb000003fd,
|
| 1105 |
+
0x43000000460,
|
| 1106 |
+
0x46100000462,
|
| 1107 |
+
0x46300000464,
|
| 1108 |
+
0x46500000466,
|
| 1109 |
+
0x46700000468,
|
| 1110 |
+
0x4690000046a,
|
| 1111 |
+
0x46b0000046c,
|
| 1112 |
+
0x46d0000046e,
|
| 1113 |
+
0x46f00000470,
|
| 1114 |
+
0x47100000472,
|
| 1115 |
+
0x47300000474,
|
| 1116 |
+
0x47500000476,
|
| 1117 |
+
0x47700000478,
|
| 1118 |
+
0x4790000047a,
|
| 1119 |
+
0x47b0000047c,
|
| 1120 |
+
0x47d0000047e,
|
| 1121 |
+
0x47f00000480,
|
| 1122 |
+
0x48100000482,
|
| 1123 |
+
0x48300000488,
|
| 1124 |
+
0x48b0000048c,
|
| 1125 |
+
0x48d0000048e,
|
| 1126 |
+
0x48f00000490,
|
| 1127 |
+
0x49100000492,
|
| 1128 |
+
0x49300000494,
|
| 1129 |
+
0x49500000496,
|
| 1130 |
+
0x49700000498,
|
| 1131 |
+
0x4990000049a,
|
| 1132 |
+
0x49b0000049c,
|
| 1133 |
+
0x49d0000049e,
|
| 1134 |
+
0x49f000004a0,
|
| 1135 |
+
0x4a1000004a2,
|
| 1136 |
+
0x4a3000004a4,
|
| 1137 |
+
0x4a5000004a6,
|
| 1138 |
+
0x4a7000004a8,
|
| 1139 |
+
0x4a9000004aa,
|
| 1140 |
+
0x4ab000004ac,
|
| 1141 |
+
0x4ad000004ae,
|
| 1142 |
+
0x4af000004b0,
|
| 1143 |
+
0x4b1000004b2,
|
| 1144 |
+
0x4b3000004b4,
|
| 1145 |
+
0x4b5000004b6,
|
| 1146 |
+
0x4b7000004b8,
|
| 1147 |
+
0x4b9000004ba,
|
| 1148 |
+
0x4bb000004bc,
|
| 1149 |
+
0x4bd000004be,
|
| 1150 |
+
0x4bf000004c0,
|
| 1151 |
+
0x4c2000004c3,
|
| 1152 |
+
0x4c4000004c5,
|
| 1153 |
+
0x4c6000004c7,
|
| 1154 |
+
0x4c8000004c9,
|
| 1155 |
+
0x4ca000004cb,
|
| 1156 |
+
0x4cc000004cd,
|
| 1157 |
+
0x4ce000004d0,
|
| 1158 |
+
0x4d1000004d2,
|
| 1159 |
+
0x4d3000004d4,
|
| 1160 |
+
0x4d5000004d6,
|
| 1161 |
+
0x4d7000004d8,
|
| 1162 |
+
0x4d9000004da,
|
| 1163 |
+
0x4db000004dc,
|
| 1164 |
+
0x4dd000004de,
|
| 1165 |
+
0x4df000004e0,
|
| 1166 |
+
0x4e1000004e2,
|
| 1167 |
+
0x4e3000004e4,
|
| 1168 |
+
0x4e5000004e6,
|
| 1169 |
+
0x4e7000004e8,
|
| 1170 |
+
0x4e9000004ea,
|
| 1171 |
+
0x4eb000004ec,
|
| 1172 |
+
0x4ed000004ee,
|
| 1173 |
+
0x4ef000004f0,
|
| 1174 |
+
0x4f1000004f2,
|
| 1175 |
+
0x4f3000004f4,
|
| 1176 |
+
0x4f5000004f6,
|
| 1177 |
+
0x4f7000004f8,
|
| 1178 |
+
0x4f9000004fa,
|
| 1179 |
+
0x4fb000004fc,
|
| 1180 |
+
0x4fd000004fe,
|
| 1181 |
+
0x4ff00000500,
|
| 1182 |
+
0x50100000502,
|
| 1183 |
+
0x50300000504,
|
| 1184 |
+
0x50500000506,
|
| 1185 |
+
0x50700000508,
|
| 1186 |
+
0x5090000050a,
|
| 1187 |
+
0x50b0000050c,
|
| 1188 |
+
0x50d0000050e,
|
| 1189 |
+
0x50f00000510,
|
| 1190 |
+
0x51100000512,
|
| 1191 |
+
0x51300000514,
|
| 1192 |
+
0x51500000516,
|
| 1193 |
+
0x51700000518,
|
| 1194 |
+
0x5190000051a,
|
| 1195 |
+
0x51b0000051c,
|
| 1196 |
+
0x51d0000051e,
|
| 1197 |
+
0x51f00000520,
|
| 1198 |
+
0x52100000522,
|
| 1199 |
+
0x52300000524,
|
| 1200 |
+
0x52500000526,
|
| 1201 |
+
0x52700000528,
|
| 1202 |
+
0x5290000052a,
|
| 1203 |
+
0x52b0000052c,
|
| 1204 |
+
0x52d0000052e,
|
| 1205 |
+
0x52f00000530,
|
| 1206 |
+
0x5590000055a,
|
| 1207 |
+
0x56000000587,
|
| 1208 |
+
0x58800000589,
|
| 1209 |
+
0x591000005be,
|
| 1210 |
+
0x5bf000005c0,
|
| 1211 |
+
0x5c1000005c3,
|
| 1212 |
+
0x5c4000005c6,
|
| 1213 |
+
0x5c7000005c8,
|
| 1214 |
+
0x5d0000005eb,
|
| 1215 |
+
0x5ef000005f3,
|
| 1216 |
+
0x6100000061b,
|
| 1217 |
+
0x62000000640,
|
| 1218 |
+
0x64100000660,
|
| 1219 |
+
0x66e00000675,
|
| 1220 |
+
0x679000006d4,
|
| 1221 |
+
0x6d5000006dd,
|
| 1222 |
+
0x6df000006e9,
|
| 1223 |
+
0x6ea000006f0,
|
| 1224 |
+
0x6fa00000700,
|
| 1225 |
+
0x7100000074b,
|
| 1226 |
+
0x74d000007b2,
|
| 1227 |
+
0x7c0000007f6,
|
| 1228 |
+
0x7fd000007fe,
|
| 1229 |
+
0x8000000082e,
|
| 1230 |
+
0x8400000085c,
|
| 1231 |
+
0x8600000086b,
|
| 1232 |
+
0x87000000888,
|
| 1233 |
+
0x8890000088f,
|
| 1234 |
+
0x898000008e2,
|
| 1235 |
+
0x8e300000958,
|
| 1236 |
+
0x96000000964,
|
| 1237 |
+
0x96600000970,
|
| 1238 |
+
0x97100000984,
|
| 1239 |
+
0x9850000098d,
|
| 1240 |
+
0x98f00000991,
|
| 1241 |
+
0x993000009a9,
|
| 1242 |
+
0x9aa000009b1,
|
| 1243 |
+
0x9b2000009b3,
|
| 1244 |
+
0x9b6000009ba,
|
| 1245 |
+
0x9bc000009c5,
|
| 1246 |
+
0x9c7000009c9,
|
| 1247 |
+
0x9cb000009cf,
|
| 1248 |
+
0x9d7000009d8,
|
| 1249 |
+
0x9e0000009e4,
|
| 1250 |
+
0x9e6000009f2,
|
| 1251 |
+
0x9fc000009fd,
|
| 1252 |
+
0x9fe000009ff,
|
| 1253 |
+
0xa0100000a04,
|
| 1254 |
+
0xa0500000a0b,
|
| 1255 |
+
0xa0f00000a11,
|
| 1256 |
+
0xa1300000a29,
|
| 1257 |
+
0xa2a00000a31,
|
| 1258 |
+
0xa3200000a33,
|
| 1259 |
+
0xa3500000a36,
|
| 1260 |
+
0xa3800000a3a,
|
| 1261 |
+
0xa3c00000a3d,
|
| 1262 |
+
0xa3e00000a43,
|
| 1263 |
+
0xa4700000a49,
|
| 1264 |
+
0xa4b00000a4e,
|
| 1265 |
+
0xa5100000a52,
|
| 1266 |
+
0xa5c00000a5d,
|
| 1267 |
+
0xa6600000a76,
|
| 1268 |
+
0xa8100000a84,
|
| 1269 |
+
0xa8500000a8e,
|
| 1270 |
+
0xa8f00000a92,
|
| 1271 |
+
0xa9300000aa9,
|
| 1272 |
+
0xaaa00000ab1,
|
| 1273 |
+
0xab200000ab4,
|
| 1274 |
+
0xab500000aba,
|
| 1275 |
+
0xabc00000ac6,
|
| 1276 |
+
0xac700000aca,
|
| 1277 |
+
0xacb00000ace,
|
| 1278 |
+
0xad000000ad1,
|
| 1279 |
+
0xae000000ae4,
|
| 1280 |
+
0xae600000af0,
|
| 1281 |
+
0xaf900000b00,
|
| 1282 |
+
0xb0100000b04,
|
| 1283 |
+
0xb0500000b0d,
|
| 1284 |
+
0xb0f00000b11,
|
| 1285 |
+
0xb1300000b29,
|
| 1286 |
+
0xb2a00000b31,
|
| 1287 |
+
0xb3200000b34,
|
| 1288 |
+
0xb3500000b3a,
|
| 1289 |
+
0xb3c00000b45,
|
| 1290 |
+
0xb4700000b49,
|
| 1291 |
+
0xb4b00000b4e,
|
| 1292 |
+
0xb5500000b58,
|
| 1293 |
+
0xb5f00000b64,
|
| 1294 |
+
0xb6600000b70,
|
| 1295 |
+
0xb7100000b72,
|
| 1296 |
+
0xb8200000b84,
|
| 1297 |
+
0xb8500000b8b,
|
| 1298 |
+
0xb8e00000b91,
|
| 1299 |
+
0xb9200000b96,
|
| 1300 |
+
0xb9900000b9b,
|
| 1301 |
+
0xb9c00000b9d,
|
| 1302 |
+
0xb9e00000ba0,
|
| 1303 |
+
0xba300000ba5,
|
| 1304 |
+
0xba800000bab,
|
| 1305 |
+
0xbae00000bba,
|
| 1306 |
+
0xbbe00000bc3,
|
| 1307 |
+
0xbc600000bc9,
|
| 1308 |
+
0xbca00000bce,
|
| 1309 |
+
0xbd000000bd1,
|
| 1310 |
+
0xbd700000bd8,
|
| 1311 |
+
0xbe600000bf0,
|
| 1312 |
+
0xc0000000c0d,
|
| 1313 |
+
0xc0e00000c11,
|
| 1314 |
+
0xc1200000c29,
|
| 1315 |
+
0xc2a00000c3a,
|
| 1316 |
+
0xc3c00000c45,
|
| 1317 |
+
0xc4600000c49,
|
| 1318 |
+
0xc4a00000c4e,
|
| 1319 |
+
0xc5500000c57,
|
| 1320 |
+
0xc5800000c5b,
|
| 1321 |
+
0xc5d00000c5e,
|
| 1322 |
+
0xc6000000c64,
|
| 1323 |
+
0xc6600000c70,
|
| 1324 |
+
0xc8000000c84,
|
| 1325 |
+
0xc8500000c8d,
|
| 1326 |
+
0xc8e00000c91,
|
| 1327 |
+
0xc9200000ca9,
|
| 1328 |
+
0xcaa00000cb4,
|
| 1329 |
+
0xcb500000cba,
|
| 1330 |
+
0xcbc00000cc5,
|
| 1331 |
+
0xcc600000cc9,
|
| 1332 |
+
0xcca00000cce,
|
| 1333 |
+
0xcd500000cd7,
|
| 1334 |
+
0xcdd00000cdf,
|
| 1335 |
+
0xce000000ce4,
|
| 1336 |
+
0xce600000cf0,
|
| 1337 |
+
0xcf100000cf4,
|
| 1338 |
+
0xd0000000d0d,
|
| 1339 |
+
0xd0e00000d11,
|
| 1340 |
+
0xd1200000d45,
|
| 1341 |
+
0xd4600000d49,
|
| 1342 |
+
0xd4a00000d4f,
|
| 1343 |
+
0xd5400000d58,
|
| 1344 |
+
0xd5f00000d64,
|
| 1345 |
+
0xd6600000d70,
|
| 1346 |
+
0xd7a00000d80,
|
| 1347 |
+
0xd8100000d84,
|
| 1348 |
+
0xd8500000d97,
|
| 1349 |
+
0xd9a00000db2,
|
| 1350 |
+
0xdb300000dbc,
|
| 1351 |
+
0xdbd00000dbe,
|
| 1352 |
+
0xdc000000dc7,
|
| 1353 |
+
0xdca00000dcb,
|
| 1354 |
+
0xdcf00000dd5,
|
| 1355 |
+
0xdd600000dd7,
|
| 1356 |
+
0xdd800000de0,
|
| 1357 |
+
0xde600000df0,
|
| 1358 |
+
0xdf200000df4,
|
| 1359 |
+
0xe0100000e33,
|
| 1360 |
+
0xe3400000e3b,
|
| 1361 |
+
0xe4000000e4f,
|
| 1362 |
+
0xe5000000e5a,
|
| 1363 |
+
0xe8100000e83,
|
| 1364 |
+
0xe8400000e85,
|
| 1365 |
+
0xe8600000e8b,
|
| 1366 |
+
0xe8c00000ea4,
|
| 1367 |
+
0xea500000ea6,
|
| 1368 |
+
0xea700000eb3,
|
| 1369 |
+
0xeb400000ebe,
|
| 1370 |
+
0xec000000ec5,
|
| 1371 |
+
0xec600000ec7,
|
| 1372 |
+
0xec800000ecf,
|
| 1373 |
+
0xed000000eda,
|
| 1374 |
+
0xede00000ee0,
|
| 1375 |
+
0xf0000000f01,
|
| 1376 |
+
0xf0b00000f0c,
|
| 1377 |
+
0xf1800000f1a,
|
| 1378 |
+
0xf2000000f2a,
|
| 1379 |
+
0xf3500000f36,
|
| 1380 |
+
0xf3700000f38,
|
| 1381 |
+
0xf3900000f3a,
|
| 1382 |
+
0xf3e00000f43,
|
| 1383 |
+
0xf4400000f48,
|
| 1384 |
+
0xf4900000f4d,
|
| 1385 |
+
0xf4e00000f52,
|
| 1386 |
+
0xf5300000f57,
|
| 1387 |
+
0xf5800000f5c,
|
| 1388 |
+
0xf5d00000f69,
|
| 1389 |
+
0xf6a00000f6d,
|
| 1390 |
+
0xf7100000f73,
|
| 1391 |
+
0xf7400000f75,
|
| 1392 |
+
0xf7a00000f81,
|
| 1393 |
+
0xf8200000f85,
|
| 1394 |
+
0xf8600000f93,
|
| 1395 |
+
0xf9400000f98,
|
| 1396 |
+
0xf9900000f9d,
|
| 1397 |
+
0xf9e00000fa2,
|
| 1398 |
+
0xfa300000fa7,
|
| 1399 |
+
0xfa800000fac,
|
| 1400 |
+
0xfad00000fb9,
|
| 1401 |
+
0xfba00000fbd,
|
| 1402 |
+
0xfc600000fc7,
|
| 1403 |
+
0x10000000104a,
|
| 1404 |
+
0x10500000109e,
|
| 1405 |
+
0x10d0000010fb,
|
| 1406 |
+
0x10fd00001100,
|
| 1407 |
+
0x120000001249,
|
| 1408 |
+
0x124a0000124e,
|
| 1409 |
+
0x125000001257,
|
| 1410 |
+
0x125800001259,
|
| 1411 |
+
0x125a0000125e,
|
| 1412 |
+
0x126000001289,
|
| 1413 |
+
0x128a0000128e,
|
| 1414 |
+
0x1290000012b1,
|
| 1415 |
+
0x12b2000012b6,
|
| 1416 |
+
0x12b8000012bf,
|
| 1417 |
+
0x12c0000012c1,
|
| 1418 |
+
0x12c2000012c6,
|
| 1419 |
+
0x12c8000012d7,
|
| 1420 |
+
0x12d800001311,
|
| 1421 |
+
0x131200001316,
|
| 1422 |
+
0x13180000135b,
|
| 1423 |
+
0x135d00001360,
|
| 1424 |
+
0x138000001390,
|
| 1425 |
+
0x13a0000013f6,
|
| 1426 |
+
0x14010000166d,
|
| 1427 |
+
0x166f00001680,
|
| 1428 |
+
0x16810000169b,
|
| 1429 |
+
0x16a0000016eb,
|
| 1430 |
+
0x16f1000016f9,
|
| 1431 |
+
0x170000001716,
|
| 1432 |
+
0x171f00001735,
|
| 1433 |
+
0x174000001754,
|
| 1434 |
+
0x17600000176d,
|
| 1435 |
+
0x176e00001771,
|
| 1436 |
+
0x177200001774,
|
| 1437 |
+
0x1780000017b4,
|
| 1438 |
+
0x17b6000017d4,
|
| 1439 |
+
0x17d7000017d8,
|
| 1440 |
+
0x17dc000017de,
|
| 1441 |
+
0x17e0000017ea,
|
| 1442 |
+
0x18100000181a,
|
| 1443 |
+
0x182000001879,
|
| 1444 |
+
0x1880000018ab,
|
| 1445 |
+
0x18b0000018f6,
|
| 1446 |
+
0x19000000191f,
|
| 1447 |
+
0x19200000192c,
|
| 1448 |
+
0x19300000193c,
|
| 1449 |
+
0x19460000196e,
|
| 1450 |
+
0x197000001975,
|
| 1451 |
+
0x1980000019ac,
|
| 1452 |
+
0x19b0000019ca,
|
| 1453 |
+
0x19d0000019da,
|
| 1454 |
+
0x1a0000001a1c,
|
| 1455 |
+
0x1a2000001a5f,
|
| 1456 |
+
0x1a6000001a7d,
|
| 1457 |
+
0x1a7f00001a8a,
|
| 1458 |
+
0x1a9000001a9a,
|
| 1459 |
+
0x1aa700001aa8,
|
| 1460 |
+
0x1ab000001abe,
|
| 1461 |
+
0x1abf00001acf,
|
| 1462 |
+
0x1b0000001b4d,
|
| 1463 |
+
0x1b5000001b5a,
|
| 1464 |
+
0x1b6b00001b74,
|
| 1465 |
+
0x1b8000001bf4,
|
| 1466 |
+
0x1c0000001c38,
|
| 1467 |
+
0x1c4000001c4a,
|
| 1468 |
+
0x1c4d00001c7e,
|
| 1469 |
+
0x1cd000001cd3,
|
| 1470 |
+
0x1cd400001cfb,
|
| 1471 |
+
0x1d0000001d2c,
|
| 1472 |
+
0x1d2f00001d30,
|
| 1473 |
+
0x1d3b00001d3c,
|
| 1474 |
+
0x1d4e00001d4f,
|
| 1475 |
+
0x1d6b00001d78,
|
| 1476 |
+
0x1d7900001d9b,
|
| 1477 |
+
0x1dc000001e00,
|
| 1478 |
+
0x1e0100001e02,
|
| 1479 |
+
0x1e0300001e04,
|
| 1480 |
+
0x1e0500001e06,
|
| 1481 |
+
0x1e0700001e08,
|
| 1482 |
+
0x1e0900001e0a,
|
| 1483 |
+
0x1e0b00001e0c,
|
| 1484 |
+
0x1e0d00001e0e,
|
| 1485 |
+
0x1e0f00001e10,
|
| 1486 |
+
0x1e1100001e12,
|
| 1487 |
+
0x1e1300001e14,
|
| 1488 |
+
0x1e1500001e16,
|
| 1489 |
+
0x1e1700001e18,
|
| 1490 |
+
0x1e1900001e1a,
|
| 1491 |
+
0x1e1b00001e1c,
|
| 1492 |
+
0x1e1d00001e1e,
|
| 1493 |
+
0x1e1f00001e20,
|
| 1494 |
+
0x1e2100001e22,
|
| 1495 |
+
0x1e2300001e24,
|
| 1496 |
+
0x1e2500001e26,
|
| 1497 |
+
0x1e2700001e28,
|
| 1498 |
+
0x1e2900001e2a,
|
| 1499 |
+
0x1e2b00001e2c,
|
| 1500 |
+
0x1e2d00001e2e,
|
| 1501 |
+
0x1e2f00001e30,
|
| 1502 |
+
0x1e3100001e32,
|
| 1503 |
+
0x1e3300001e34,
|
| 1504 |
+
0x1e3500001e36,
|
| 1505 |
+
0x1e3700001e38,
|
| 1506 |
+
0x1e3900001e3a,
|
| 1507 |
+
0x1e3b00001e3c,
|
| 1508 |
+
0x1e3d00001e3e,
|
| 1509 |
+
0x1e3f00001e40,
|
| 1510 |
+
0x1e4100001e42,
|
| 1511 |
+
0x1e4300001e44,
|
| 1512 |
+
0x1e4500001e46,
|
| 1513 |
+
0x1e4700001e48,
|
| 1514 |
+
0x1e4900001e4a,
|
| 1515 |
+
0x1e4b00001e4c,
|
| 1516 |
+
0x1e4d00001e4e,
|
| 1517 |
+
0x1e4f00001e50,
|
| 1518 |
+
0x1e5100001e52,
|
| 1519 |
+
0x1e5300001e54,
|
| 1520 |
+
0x1e5500001e56,
|
| 1521 |
+
0x1e5700001e58,
|
| 1522 |
+
0x1e5900001e5a,
|
| 1523 |
+
0x1e5b00001e5c,
|
| 1524 |
+
0x1e5d00001e5e,
|
| 1525 |
+
0x1e5f00001e60,
|
| 1526 |
+
0x1e6100001e62,
|
| 1527 |
+
0x1e6300001e64,
|
| 1528 |
+
0x1e6500001e66,
|
| 1529 |
+
0x1e6700001e68,
|
| 1530 |
+
0x1e6900001e6a,
|
| 1531 |
+
0x1e6b00001e6c,
|
| 1532 |
+
0x1e6d00001e6e,
|
| 1533 |
+
0x1e6f00001e70,
|
| 1534 |
+
0x1e7100001e72,
|
| 1535 |
+
0x1e7300001e74,
|
| 1536 |
+
0x1e7500001e76,
|
| 1537 |
+
0x1e7700001e78,
|
| 1538 |
+
0x1e7900001e7a,
|
| 1539 |
+
0x1e7b00001e7c,
|
| 1540 |
+
0x1e7d00001e7e,
|
| 1541 |
+
0x1e7f00001e80,
|
| 1542 |
+
0x1e8100001e82,
|
| 1543 |
+
0x1e8300001e84,
|
| 1544 |
+
0x1e8500001e86,
|
| 1545 |
+
0x1e8700001e88,
|
| 1546 |
+
0x1e8900001e8a,
|
| 1547 |
+
0x1e8b00001e8c,
|
| 1548 |
+
0x1e8d00001e8e,
|
| 1549 |
+
0x1e8f00001e90,
|
| 1550 |
+
0x1e9100001e92,
|
| 1551 |
+
0x1e9300001e94,
|
| 1552 |
+
0x1e9500001e9a,
|
| 1553 |
+
0x1e9c00001e9e,
|
| 1554 |
+
0x1e9f00001ea0,
|
| 1555 |
+
0x1ea100001ea2,
|
| 1556 |
+
0x1ea300001ea4,
|
| 1557 |
+
0x1ea500001ea6,
|
| 1558 |
+
0x1ea700001ea8,
|
| 1559 |
+
0x1ea900001eaa,
|
| 1560 |
+
0x1eab00001eac,
|
| 1561 |
+
0x1ead00001eae,
|
| 1562 |
+
0x1eaf00001eb0,
|
| 1563 |
+
0x1eb100001eb2,
|
| 1564 |
+
0x1eb300001eb4,
|
| 1565 |
+
0x1eb500001eb6,
|
| 1566 |
+
0x1eb700001eb8,
|
| 1567 |
+
0x1eb900001eba,
|
| 1568 |
+
0x1ebb00001ebc,
|
| 1569 |
+
0x1ebd00001ebe,
|
| 1570 |
+
0x1ebf00001ec0,
|
| 1571 |
+
0x1ec100001ec2,
|
| 1572 |
+
0x1ec300001ec4,
|
| 1573 |
+
0x1ec500001ec6,
|
| 1574 |
+
0x1ec700001ec8,
|
| 1575 |
+
0x1ec900001eca,
|
| 1576 |
+
0x1ecb00001ecc,
|
| 1577 |
+
0x1ecd00001ece,
|
| 1578 |
+
0x1ecf00001ed0,
|
| 1579 |
+
0x1ed100001ed2,
|
| 1580 |
+
0x1ed300001ed4,
|
| 1581 |
+
0x1ed500001ed6,
|
| 1582 |
+
0x1ed700001ed8,
|
| 1583 |
+
0x1ed900001eda,
|
| 1584 |
+
0x1edb00001edc,
|
| 1585 |
+
0x1edd00001ede,
|
| 1586 |
+
0x1edf00001ee0,
|
| 1587 |
+
0x1ee100001ee2,
|
| 1588 |
+
0x1ee300001ee4,
|
| 1589 |
+
0x1ee500001ee6,
|
| 1590 |
+
0x1ee700001ee8,
|
| 1591 |
+
0x1ee900001eea,
|
| 1592 |
+
0x1eeb00001eec,
|
| 1593 |
+
0x1eed00001eee,
|
| 1594 |
+
0x1eef00001ef0,
|
| 1595 |
+
0x1ef100001ef2,
|
| 1596 |
+
0x1ef300001ef4,
|
| 1597 |
+
0x1ef500001ef6,
|
| 1598 |
+
0x1ef700001ef8,
|
| 1599 |
+
0x1ef900001efa,
|
| 1600 |
+
0x1efb00001efc,
|
| 1601 |
+
0x1efd00001efe,
|
| 1602 |
+
0x1eff00001f08,
|
| 1603 |
+
0x1f1000001f16,
|
| 1604 |
+
0x1f2000001f28,
|
| 1605 |
+
0x1f3000001f38,
|
| 1606 |
+
0x1f4000001f46,
|
| 1607 |
+
0x1f5000001f58,
|
| 1608 |
+
0x1f6000001f68,
|
| 1609 |
+
0x1f7000001f71,
|
| 1610 |
+
0x1f7200001f73,
|
| 1611 |
+
0x1f7400001f75,
|
| 1612 |
+
0x1f7600001f77,
|
| 1613 |
+
0x1f7800001f79,
|
| 1614 |
+
0x1f7a00001f7b,
|
| 1615 |
+
0x1f7c00001f7d,
|
| 1616 |
+
0x1fb000001fb2,
|
| 1617 |
+
0x1fb600001fb7,
|
| 1618 |
+
0x1fc600001fc7,
|
| 1619 |
+
0x1fd000001fd3,
|
| 1620 |
+
0x1fd600001fd8,
|
| 1621 |
+
0x1fe000001fe3,
|
| 1622 |
+
0x1fe400001fe8,
|
| 1623 |
+
0x1ff600001ff7,
|
| 1624 |
+
0x214e0000214f,
|
| 1625 |
+
0x218400002185,
|
| 1626 |
+
0x2c3000002c60,
|
| 1627 |
+
0x2c6100002c62,
|
| 1628 |
+
0x2c6500002c67,
|
| 1629 |
+
0x2c6800002c69,
|
| 1630 |
+
0x2c6a00002c6b,
|
| 1631 |
+
0x2c6c00002c6d,
|
| 1632 |
+
0x2c7100002c72,
|
| 1633 |
+
0x2c7300002c75,
|
| 1634 |
+
0x2c7600002c7c,
|
| 1635 |
+
0x2c8100002c82,
|
| 1636 |
+
0x2c8300002c84,
|
| 1637 |
+
0x2c8500002c86,
|
| 1638 |
+
0x2c8700002c88,
|
| 1639 |
+
0x2c8900002c8a,
|
| 1640 |
+
0x2c8b00002c8c,
|
| 1641 |
+
0x2c8d00002c8e,
|
| 1642 |
+
0x2c8f00002c90,
|
| 1643 |
+
0x2c9100002c92,
|
| 1644 |
+
0x2c9300002c94,
|
| 1645 |
+
0x2c9500002c96,
|
| 1646 |
+
0x2c9700002c98,
|
| 1647 |
+
0x2c9900002c9a,
|
| 1648 |
+
0x2c9b00002c9c,
|
| 1649 |
+
0x2c9d00002c9e,
|
| 1650 |
+
0x2c9f00002ca0,
|
| 1651 |
+
0x2ca100002ca2,
|
| 1652 |
+
0x2ca300002ca4,
|
| 1653 |
+
0x2ca500002ca6,
|
| 1654 |
+
0x2ca700002ca8,
|
| 1655 |
+
0x2ca900002caa,
|
| 1656 |
+
0x2cab00002cac,
|
| 1657 |
+
0x2cad00002cae,
|
| 1658 |
+
0x2caf00002cb0,
|
| 1659 |
+
0x2cb100002cb2,
|
| 1660 |
+
0x2cb300002cb4,
|
| 1661 |
+
0x2cb500002cb6,
|
| 1662 |
+
0x2cb700002cb8,
|
| 1663 |
+
0x2cb900002cba,
|
| 1664 |
+
0x2cbb00002cbc,
|
| 1665 |
+
0x2cbd00002cbe,
|
| 1666 |
+
0x2cbf00002cc0,
|
| 1667 |
+
0x2cc100002cc2,
|
| 1668 |
+
0x2cc300002cc4,
|
| 1669 |
+
0x2cc500002cc6,
|
| 1670 |
+
0x2cc700002cc8,
|
| 1671 |
+
0x2cc900002cca,
|
| 1672 |
+
0x2ccb00002ccc,
|
| 1673 |
+
0x2ccd00002cce,
|
| 1674 |
+
0x2ccf00002cd0,
|
| 1675 |
+
0x2cd100002cd2,
|
| 1676 |
+
0x2cd300002cd4,
|
| 1677 |
+
0x2cd500002cd6,
|
| 1678 |
+
0x2cd700002cd8,
|
| 1679 |
+
0x2cd900002cda,
|
| 1680 |
+
0x2cdb00002cdc,
|
| 1681 |
+
0x2cdd00002cde,
|
| 1682 |
+
0x2cdf00002ce0,
|
| 1683 |
+
0x2ce100002ce2,
|
| 1684 |
+
0x2ce300002ce5,
|
| 1685 |
+
0x2cec00002ced,
|
| 1686 |
+
0x2cee00002cf2,
|
| 1687 |
+
0x2cf300002cf4,
|
| 1688 |
+
0x2d0000002d26,
|
| 1689 |
+
0x2d2700002d28,
|
| 1690 |
+
0x2d2d00002d2e,
|
| 1691 |
+
0x2d3000002d68,
|
| 1692 |
+
0x2d7f00002d97,
|
| 1693 |
+
0x2da000002da7,
|
| 1694 |
+
0x2da800002daf,
|
| 1695 |
+
0x2db000002db7,
|
| 1696 |
+
0x2db800002dbf,
|
| 1697 |
+
0x2dc000002dc7,
|
| 1698 |
+
0x2dc800002dcf,
|
| 1699 |
+
0x2dd000002dd7,
|
| 1700 |
+
0x2dd800002ddf,
|
| 1701 |
+
0x2de000002e00,
|
| 1702 |
+
0x2e2f00002e30,
|
| 1703 |
+
0x300500003008,
|
| 1704 |
+
0x302a0000302e,
|
| 1705 |
+
0x303c0000303d,
|
| 1706 |
+
0x304100003097,
|
| 1707 |
+
0x30990000309b,
|
| 1708 |
+
0x309d0000309f,
|
| 1709 |
+
0x30a1000030fb,
|
| 1710 |
+
0x30fc000030ff,
|
| 1711 |
+
0x310500003130,
|
| 1712 |
+
0x31a0000031c0,
|
| 1713 |
+
0x31f000003200,
|
| 1714 |
+
0x340000004dc0,
|
| 1715 |
+
0x4e000000a48d,
|
| 1716 |
+
0xa4d00000a4fe,
|
| 1717 |
+
0xa5000000a60d,
|
| 1718 |
+
0xa6100000a62c,
|
| 1719 |
+
0xa6410000a642,
|
| 1720 |
+
0xa6430000a644,
|
| 1721 |
+
0xa6450000a646,
|
| 1722 |
+
0xa6470000a648,
|
| 1723 |
+
0xa6490000a64a,
|
| 1724 |
+
0xa64b0000a64c,
|
| 1725 |
+
0xa64d0000a64e,
|
| 1726 |
+
0xa64f0000a650,
|
| 1727 |
+
0xa6510000a652,
|
| 1728 |
+
0xa6530000a654,
|
| 1729 |
+
0xa6550000a656,
|
| 1730 |
+
0xa6570000a658,
|
| 1731 |
+
0xa6590000a65a,
|
| 1732 |
+
0xa65b0000a65c,
|
| 1733 |
+
0xa65d0000a65e,
|
| 1734 |
+
0xa65f0000a660,
|
| 1735 |
+
0xa6610000a662,
|
| 1736 |
+
0xa6630000a664,
|
| 1737 |
+
0xa6650000a666,
|
| 1738 |
+
0xa6670000a668,
|
| 1739 |
+
0xa6690000a66a,
|
| 1740 |
+
0xa66b0000a66c,
|
| 1741 |
+
0xa66d0000a670,
|
| 1742 |
+
0xa6740000a67e,
|
| 1743 |
+
0xa67f0000a680,
|
| 1744 |
+
0xa6810000a682,
|
| 1745 |
+
0xa6830000a684,
|
| 1746 |
+
0xa6850000a686,
|
| 1747 |
+
0xa6870000a688,
|
| 1748 |
+
0xa6890000a68a,
|
| 1749 |
+
0xa68b0000a68c,
|
| 1750 |
+
0xa68d0000a68e,
|
| 1751 |
+
0xa68f0000a690,
|
| 1752 |
+
0xa6910000a692,
|
| 1753 |
+
0xa6930000a694,
|
| 1754 |
+
0xa6950000a696,
|
| 1755 |
+
0xa6970000a698,
|
| 1756 |
+
0xa6990000a69a,
|
| 1757 |
+
0xa69b0000a69c,
|
| 1758 |
+
0xa69e0000a6e6,
|
| 1759 |
+
0xa6f00000a6f2,
|
| 1760 |
+
0xa7170000a720,
|
| 1761 |
+
0xa7230000a724,
|
| 1762 |
+
0xa7250000a726,
|
| 1763 |
+
0xa7270000a728,
|
| 1764 |
+
0xa7290000a72a,
|
| 1765 |
+
0xa72b0000a72c,
|
| 1766 |
+
0xa72d0000a72e,
|
| 1767 |
+
0xa72f0000a732,
|
| 1768 |
+
0xa7330000a734,
|
| 1769 |
+
0xa7350000a736,
|
| 1770 |
+
0xa7370000a738,
|
| 1771 |
+
0xa7390000a73a,
|
| 1772 |
+
0xa73b0000a73c,
|
| 1773 |
+
0xa73d0000a73e,
|
| 1774 |
+
0xa73f0000a740,
|
| 1775 |
+
0xa7410000a742,
|
| 1776 |
+
0xa7430000a744,
|
| 1777 |
+
0xa7450000a746,
|
| 1778 |
+
0xa7470000a748,
|
| 1779 |
+
0xa7490000a74a,
|
| 1780 |
+
0xa74b0000a74c,
|
| 1781 |
+
0xa74d0000a74e,
|
| 1782 |
+
0xa74f0000a750,
|
| 1783 |
+
0xa7510000a752,
|
| 1784 |
+
0xa7530000a754,
|
| 1785 |
+
0xa7550000a756,
|
| 1786 |
+
0xa7570000a758,
|
| 1787 |
+
0xa7590000a75a,
|
| 1788 |
+
0xa75b0000a75c,
|
| 1789 |
+
0xa75d0000a75e,
|
| 1790 |
+
0xa75f0000a760,
|
| 1791 |
+
0xa7610000a762,
|
| 1792 |
+
0xa7630000a764,
|
| 1793 |
+
0xa7650000a766,
|
| 1794 |
+
0xa7670000a768,
|
| 1795 |
+
0xa7690000a76a,
|
| 1796 |
+
0xa76b0000a76c,
|
| 1797 |
+
0xa76d0000a76e,
|
| 1798 |
+
0xa76f0000a770,
|
| 1799 |
+
0xa7710000a779,
|
| 1800 |
+
0xa77a0000a77b,
|
| 1801 |
+
0xa77c0000a77d,
|
| 1802 |
+
0xa77f0000a780,
|
| 1803 |
+
0xa7810000a782,
|
| 1804 |
+
0xa7830000a784,
|
| 1805 |
+
0xa7850000a786,
|
| 1806 |
+
0xa7870000a789,
|
| 1807 |
+
0xa78c0000a78d,
|
| 1808 |
+
0xa78e0000a790,
|
| 1809 |
+
0xa7910000a792,
|
| 1810 |
+
0xa7930000a796,
|
| 1811 |
+
0xa7970000a798,
|
| 1812 |
+
0xa7990000a79a,
|
| 1813 |
+
0xa79b0000a79c,
|
| 1814 |
+
0xa79d0000a79e,
|
| 1815 |
+
0xa79f0000a7a0,
|
| 1816 |
+
0xa7a10000a7a2,
|
| 1817 |
+
0xa7a30000a7a4,
|
| 1818 |
+
0xa7a50000a7a6,
|
| 1819 |
+
0xa7a70000a7a8,
|
| 1820 |
+
0xa7a90000a7aa,
|
| 1821 |
+
0xa7af0000a7b0,
|
| 1822 |
+
0xa7b50000a7b6,
|
| 1823 |
+
0xa7b70000a7b8,
|
| 1824 |
+
0xa7b90000a7ba,
|
| 1825 |
+
0xa7bb0000a7bc,
|
| 1826 |
+
0xa7bd0000a7be,
|
| 1827 |
+
0xa7bf0000a7c0,
|
| 1828 |
+
0xa7c10000a7c2,
|
| 1829 |
+
0xa7c30000a7c4,
|
| 1830 |
+
0xa7c80000a7c9,
|
| 1831 |
+
0xa7ca0000a7cb,
|
| 1832 |
+
0xa7d10000a7d2,
|
| 1833 |
+
0xa7d30000a7d4,
|
| 1834 |
+
0xa7d50000a7d6,
|
| 1835 |
+
0xa7d70000a7d8,
|
| 1836 |
+
0xa7d90000a7da,
|
| 1837 |
+
0xa7f20000a7f5,
|
| 1838 |
+
0xa7f60000a7f8,
|
| 1839 |
+
0xa7fa0000a828,
|
| 1840 |
+
0xa82c0000a82d,
|
| 1841 |
+
0xa8400000a874,
|
| 1842 |
+
0xa8800000a8c6,
|
| 1843 |
+
0xa8d00000a8da,
|
| 1844 |
+
0xa8e00000a8f8,
|
| 1845 |
+
0xa8fb0000a8fc,
|
| 1846 |
+
0xa8fd0000a92e,
|
| 1847 |
+
0xa9300000a954,
|
| 1848 |
+
0xa9800000a9c1,
|
| 1849 |
+
0xa9cf0000a9da,
|
| 1850 |
+
0xa9e00000a9ff,
|
| 1851 |
+
0xaa000000aa37,
|
| 1852 |
+
0xaa400000aa4e,
|
| 1853 |
+
0xaa500000aa5a,
|
| 1854 |
+
0xaa600000aa77,
|
| 1855 |
+
0xaa7a0000aac3,
|
| 1856 |
+
0xaadb0000aade,
|
| 1857 |
+
0xaae00000aaf0,
|
| 1858 |
+
0xaaf20000aaf7,
|
| 1859 |
+
0xab010000ab07,
|
| 1860 |
+
0xab090000ab0f,
|
| 1861 |
+
0xab110000ab17,
|
| 1862 |
+
0xab200000ab27,
|
| 1863 |
+
0xab280000ab2f,
|
| 1864 |
+
0xab300000ab5b,
|
| 1865 |
+
0xab600000ab69,
|
| 1866 |
+
0xabc00000abeb,
|
| 1867 |
+
0xabec0000abee,
|
| 1868 |
+
0xabf00000abfa,
|
| 1869 |
+
0xac000000d7a4,
|
| 1870 |
+
0xfa0e0000fa10,
|
| 1871 |
+
0xfa110000fa12,
|
| 1872 |
+
0xfa130000fa15,
|
| 1873 |
+
0xfa1f0000fa20,
|
| 1874 |
+
0xfa210000fa22,
|
| 1875 |
+
0xfa230000fa25,
|
| 1876 |
+
0xfa270000fa2a,
|
| 1877 |
+
0xfb1e0000fb1f,
|
| 1878 |
+
0xfe200000fe30,
|
| 1879 |
+
0xfe730000fe74,
|
| 1880 |
+
0x100000001000c,
|
| 1881 |
+
0x1000d00010027,
|
| 1882 |
+
0x100280001003b,
|
| 1883 |
+
0x1003c0001003e,
|
| 1884 |
+
0x1003f0001004e,
|
| 1885 |
+
0x100500001005e,
|
| 1886 |
+
0x10080000100fb,
|
| 1887 |
+
0x101fd000101fe,
|
| 1888 |
+
0x102800001029d,
|
| 1889 |
+
0x102a0000102d1,
|
| 1890 |
+
0x102e0000102e1,
|
| 1891 |
+
0x1030000010320,
|
| 1892 |
+
0x1032d00010341,
|
| 1893 |
+
0x103420001034a,
|
| 1894 |
+
0x103500001037b,
|
| 1895 |
+
0x103800001039e,
|
| 1896 |
+
0x103a0000103c4,
|
| 1897 |
+
0x103c8000103d0,
|
| 1898 |
+
0x104280001049e,
|
| 1899 |
+
0x104a0000104aa,
|
| 1900 |
+
0x104d8000104fc,
|
| 1901 |
+
0x1050000010528,
|
| 1902 |
+
0x1053000010564,
|
| 1903 |
+
0x10597000105a2,
|
| 1904 |
+
0x105a3000105b2,
|
| 1905 |
+
0x105b3000105ba,
|
| 1906 |
+
0x105bb000105bd,
|
| 1907 |
+
0x1060000010737,
|
| 1908 |
+
0x1074000010756,
|
| 1909 |
+
0x1076000010768,
|
| 1910 |
+
0x1078000010786,
|
| 1911 |
+
0x10787000107b1,
|
| 1912 |
+
0x107b2000107bb,
|
| 1913 |
+
0x1080000010806,
|
| 1914 |
+
0x1080800010809,
|
| 1915 |
+
0x1080a00010836,
|
| 1916 |
+
0x1083700010839,
|
| 1917 |
+
0x1083c0001083d,
|
| 1918 |
+
0x1083f00010856,
|
| 1919 |
+
0x1086000010877,
|
| 1920 |
+
0x108800001089f,
|
| 1921 |
+
0x108e0000108f3,
|
| 1922 |
+
0x108f4000108f6,
|
| 1923 |
+
0x1090000010916,
|
| 1924 |
+
0x109200001093a,
|
| 1925 |
+
0x10980000109b8,
|
| 1926 |
+
0x109be000109c0,
|
| 1927 |
+
0x10a0000010a04,
|
| 1928 |
+
0x10a0500010a07,
|
| 1929 |
+
0x10a0c00010a14,
|
| 1930 |
+
0x10a1500010a18,
|
| 1931 |
+
0x10a1900010a36,
|
| 1932 |
+
0x10a3800010a3b,
|
| 1933 |
+
0x10a3f00010a40,
|
| 1934 |
+
0x10a6000010a7d,
|
| 1935 |
+
0x10a8000010a9d,
|
| 1936 |
+
0x10ac000010ac8,
|
| 1937 |
+
0x10ac900010ae7,
|
| 1938 |
+
0x10b0000010b36,
|
| 1939 |
+
0x10b4000010b56,
|
| 1940 |
+
0x10b6000010b73,
|
| 1941 |
+
0x10b8000010b92,
|
| 1942 |
+
0x10c0000010c49,
|
| 1943 |
+
0x10cc000010cf3,
|
| 1944 |
+
0x10d0000010d28,
|
| 1945 |
+
0x10d3000010d3a,
|
| 1946 |
+
0x10e8000010eaa,
|
| 1947 |
+
0x10eab00010ead,
|
| 1948 |
+
0x10eb000010eb2,
|
| 1949 |
+
0x10efd00010f1d,
|
| 1950 |
+
0x10f2700010f28,
|
| 1951 |
+
0x10f3000010f51,
|
| 1952 |
+
0x10f7000010f86,
|
| 1953 |
+
0x10fb000010fc5,
|
| 1954 |
+
0x10fe000010ff7,
|
| 1955 |
+
0x1100000011047,
|
| 1956 |
+
0x1106600011076,
|
| 1957 |
+
0x1107f000110bb,
|
| 1958 |
+
0x110c2000110c3,
|
| 1959 |
+
0x110d0000110e9,
|
| 1960 |
+
0x110f0000110fa,
|
| 1961 |
+
0x1110000011135,
|
| 1962 |
+
0x1113600011140,
|
| 1963 |
+
0x1114400011148,
|
| 1964 |
+
0x1115000011174,
|
| 1965 |
+
0x1117600011177,
|
| 1966 |
+
0x11180000111c5,
|
| 1967 |
+
0x111c9000111cd,
|
| 1968 |
+
0x111ce000111db,
|
| 1969 |
+
0x111dc000111dd,
|
| 1970 |
+
0x1120000011212,
|
| 1971 |
+
0x1121300011238,
|
| 1972 |
+
0x1123e00011242,
|
| 1973 |
+
0x1128000011287,
|
| 1974 |
+
0x1128800011289,
|
| 1975 |
+
0x1128a0001128e,
|
| 1976 |
+
0x1128f0001129e,
|
| 1977 |
+
0x1129f000112a9,
|
| 1978 |
+
0x112b0000112eb,
|
| 1979 |
+
0x112f0000112fa,
|
| 1980 |
+
0x1130000011304,
|
| 1981 |
+
0x113050001130d,
|
| 1982 |
+
0x1130f00011311,
|
| 1983 |
+
0x1131300011329,
|
| 1984 |
+
0x1132a00011331,
|
| 1985 |
+
0x1133200011334,
|
| 1986 |
+
0x113350001133a,
|
| 1987 |
+
0x1133b00011345,
|
| 1988 |
+
0x1134700011349,
|
| 1989 |
+
0x1134b0001134e,
|
| 1990 |
+
0x1135000011351,
|
| 1991 |
+
0x1135700011358,
|
| 1992 |
+
0x1135d00011364,
|
| 1993 |
+
0x113660001136d,
|
| 1994 |
+
0x1137000011375,
|
| 1995 |
+
0x114000001144b,
|
| 1996 |
+
0x114500001145a,
|
| 1997 |
+
0x1145e00011462,
|
| 1998 |
+
0x11480000114c6,
|
| 1999 |
+
0x114c7000114c8,
|
| 2000 |
+
0x114d0000114da,
|
| 2001 |
+
0x11580000115b6,
|
| 2002 |
+
0x115b8000115c1,
|
| 2003 |
+
0x115d8000115de,
|
| 2004 |
+
0x1160000011641,
|
| 2005 |
+
0x1164400011645,
|
| 2006 |
+
0x116500001165a,
|
| 2007 |
+
0x11680000116b9,
|
| 2008 |
+
0x116c0000116ca,
|
| 2009 |
+
0x117000001171b,
|
| 2010 |
+
0x1171d0001172c,
|
| 2011 |
+
0x117300001173a,
|
| 2012 |
+
0x1174000011747,
|
| 2013 |
+
0x118000001183b,
|
| 2014 |
+
0x118c0000118ea,
|
| 2015 |
+
0x118ff00011907,
|
| 2016 |
+
0x119090001190a,
|
| 2017 |
+
0x1190c00011914,
|
| 2018 |
+
0x1191500011917,
|
| 2019 |
+
0x1191800011936,
|
| 2020 |
+
0x1193700011939,
|
| 2021 |
+
0x1193b00011944,
|
| 2022 |
+
0x119500001195a,
|
| 2023 |
+
0x119a0000119a8,
|
| 2024 |
+
0x119aa000119d8,
|
| 2025 |
+
0x119da000119e2,
|
| 2026 |
+
0x119e3000119e5,
|
| 2027 |
+
0x11a0000011a3f,
|
| 2028 |
+
0x11a4700011a48,
|
| 2029 |
+
0x11a5000011a9a,
|
| 2030 |
+
0x11a9d00011a9e,
|
| 2031 |
+
0x11ab000011af9,
|
| 2032 |
+
0x11c0000011c09,
|
| 2033 |
+
0x11c0a00011c37,
|
| 2034 |
+
0x11c3800011c41,
|
| 2035 |
+
0x11c5000011c5a,
|
| 2036 |
+
0x11c7200011c90,
|
| 2037 |
+
0x11c9200011ca8,
|
| 2038 |
+
0x11ca900011cb7,
|
| 2039 |
+
0x11d0000011d07,
|
| 2040 |
+
0x11d0800011d0a,
|
| 2041 |
+
0x11d0b00011d37,
|
| 2042 |
+
0x11d3a00011d3b,
|
| 2043 |
+
0x11d3c00011d3e,
|
| 2044 |
+
0x11d3f00011d48,
|
| 2045 |
+
0x11d5000011d5a,
|
| 2046 |
+
0x11d6000011d66,
|
| 2047 |
+
0x11d6700011d69,
|
| 2048 |
+
0x11d6a00011d8f,
|
| 2049 |
+
0x11d9000011d92,
|
| 2050 |
+
0x11d9300011d99,
|
| 2051 |
+
0x11da000011daa,
|
| 2052 |
+
0x11ee000011ef7,
|
| 2053 |
+
0x11f0000011f11,
|
| 2054 |
+
0x11f1200011f3b,
|
| 2055 |
+
0x11f3e00011f43,
|
| 2056 |
+
0x11f5000011f5a,
|
| 2057 |
+
0x11fb000011fb1,
|
| 2058 |
+
0x120000001239a,
|
| 2059 |
+
0x1248000012544,
|
| 2060 |
+
0x12f9000012ff1,
|
| 2061 |
+
0x1300000013430,
|
| 2062 |
+
0x1344000013456,
|
| 2063 |
+
0x1440000014647,
|
| 2064 |
+
0x1680000016a39,
|
| 2065 |
+
0x16a4000016a5f,
|
| 2066 |
+
0x16a6000016a6a,
|
| 2067 |
+
0x16a7000016abf,
|
| 2068 |
+
0x16ac000016aca,
|
| 2069 |
+
0x16ad000016aee,
|
| 2070 |
+
0x16af000016af5,
|
| 2071 |
+
0x16b0000016b37,
|
| 2072 |
+
0x16b4000016b44,
|
| 2073 |
+
0x16b5000016b5a,
|
| 2074 |
+
0x16b6300016b78,
|
| 2075 |
+
0x16b7d00016b90,
|
| 2076 |
+
0x16e6000016e80,
|
| 2077 |
+
0x16f0000016f4b,
|
| 2078 |
+
0x16f4f00016f88,
|
| 2079 |
+
0x16f8f00016fa0,
|
| 2080 |
+
0x16fe000016fe2,
|
| 2081 |
+
0x16fe300016fe5,
|
| 2082 |
+
0x16ff000016ff2,
|
| 2083 |
+
0x17000000187f8,
|
| 2084 |
+
0x1880000018cd6,
|
| 2085 |
+
0x18d0000018d09,
|
| 2086 |
+
0x1aff00001aff4,
|
| 2087 |
+
0x1aff50001affc,
|
| 2088 |
+
0x1affd0001afff,
|
| 2089 |
+
0x1b0000001b123,
|
| 2090 |
+
0x1b1320001b133,
|
| 2091 |
+
0x1b1500001b153,
|
| 2092 |
+
0x1b1550001b156,
|
| 2093 |
+
0x1b1640001b168,
|
| 2094 |
+
0x1b1700001b2fc,
|
| 2095 |
+
0x1bc000001bc6b,
|
| 2096 |
+
0x1bc700001bc7d,
|
| 2097 |
+
0x1bc800001bc89,
|
| 2098 |
+
0x1bc900001bc9a,
|
| 2099 |
+
0x1bc9d0001bc9f,
|
| 2100 |
+
0x1cf000001cf2e,
|
| 2101 |
+
0x1cf300001cf47,
|
| 2102 |
+
0x1da000001da37,
|
| 2103 |
+
0x1da3b0001da6d,
|
| 2104 |
+
0x1da750001da76,
|
| 2105 |
+
0x1da840001da85,
|
| 2106 |
+
0x1da9b0001daa0,
|
| 2107 |
+
0x1daa10001dab0,
|
| 2108 |
+
0x1df000001df1f,
|
| 2109 |
+
0x1df250001df2b,
|
| 2110 |
+
0x1e0000001e007,
|
| 2111 |
+
0x1e0080001e019,
|
| 2112 |
+
0x1e01b0001e022,
|
| 2113 |
+
0x1e0230001e025,
|
| 2114 |
+
0x1e0260001e02b,
|
| 2115 |
+
0x1e0300001e06e,
|
| 2116 |
+
0x1e08f0001e090,
|
| 2117 |
+
0x1e1000001e12d,
|
| 2118 |
+
0x1e1300001e13e,
|
| 2119 |
+
0x1e1400001e14a,
|
| 2120 |
+
0x1e14e0001e14f,
|
| 2121 |
+
0x1e2900001e2af,
|
| 2122 |
+
0x1e2c00001e2fa,
|
| 2123 |
+
0x1e4d00001e4fa,
|
| 2124 |
+
0x1e7e00001e7e7,
|
| 2125 |
+
0x1e7e80001e7ec,
|
| 2126 |
+
0x1e7ed0001e7ef,
|
| 2127 |
+
0x1e7f00001e7ff,
|
| 2128 |
+
0x1e8000001e8c5,
|
| 2129 |
+
0x1e8d00001e8d7,
|
| 2130 |
+
0x1e9220001e94c,
|
| 2131 |
+
0x1e9500001e95a,
|
| 2132 |
+
0x200000002a6e0,
|
| 2133 |
+
0x2a7000002b73a,
|
| 2134 |
+
0x2b7400002b81e,
|
| 2135 |
+
0x2b8200002cea2,
|
| 2136 |
+
0x2ceb00002ebe1,
|
| 2137 |
+
0x300000003134b,
|
| 2138 |
+
0x31350000323b0,
|
| 2139 |
+
),
|
| 2140 |
+
'CONTEXTJ': (
|
| 2141 |
+
0x200c0000200e,
|
| 2142 |
+
),
|
| 2143 |
+
'CONTEXTO': (
|
| 2144 |
+
0xb7000000b8,
|
| 2145 |
+
0x37500000376,
|
| 2146 |
+
0x5f3000005f5,
|
| 2147 |
+
0x6600000066a,
|
| 2148 |
+
0x6f0000006fa,
|
| 2149 |
+
0x30fb000030fc,
|
| 2150 |
+
),
|
| 2151 |
+
}
|
.venv/lib/python3.11/site-packages/pip/_vendor/idna/intranges.py
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""
|
| 2 |
+
Given a list of integers, made up of (hopefully) a small number of long runs
|
| 3 |
+
of consecutive integers, compute a representation of the form
|
| 4 |
+
((start1, end1), (start2, end2) ...). Then answer the question "was x present
|
| 5 |
+
in the original list?" in time O(log(# runs)).
|
| 6 |
+
"""
|
| 7 |
+
|
| 8 |
+
import bisect
|
| 9 |
+
from typing import List, Tuple
|
| 10 |
+
|
| 11 |
+
def intranges_from_list(list_: List[int]) -> Tuple[int, ...]:
|
| 12 |
+
"""Represent a list of integers as a sequence of ranges:
|
| 13 |
+
((start_0, end_0), (start_1, end_1), ...), such that the original
|
| 14 |
+
integers are exactly those x such that start_i <= x < end_i for some i.
|
| 15 |
+
|
| 16 |
+
Ranges are encoded as single integers (start << 32 | end), not as tuples.
|
| 17 |
+
"""
|
| 18 |
+
|
| 19 |
+
sorted_list = sorted(list_)
|
| 20 |
+
ranges = []
|
| 21 |
+
last_write = -1
|
| 22 |
+
for i in range(len(sorted_list)):
|
| 23 |
+
if i+1 < len(sorted_list):
|
| 24 |
+
if sorted_list[i] == sorted_list[i+1]-1:
|
| 25 |
+
continue
|
| 26 |
+
current_range = sorted_list[last_write+1:i+1]
|
| 27 |
+
ranges.append(_encode_range(current_range[0], current_range[-1] + 1))
|
| 28 |
+
last_write = i
|
| 29 |
+
|
| 30 |
+
return tuple(ranges)
|
| 31 |
+
|
| 32 |
+
def _encode_range(start: int, end: int) -> int:
|
| 33 |
+
return (start << 32) | end
|
| 34 |
+
|
| 35 |
+
def _decode_range(r: int) -> Tuple[int, int]:
|
| 36 |
+
return (r >> 32), (r & ((1 << 32) - 1))
|
| 37 |
+
|
| 38 |
+
|
| 39 |
+
def intranges_contain(int_: int, ranges: Tuple[int, ...]) -> bool:
|
| 40 |
+
"""Determine if `int_` falls into one of the ranges in `ranges`."""
|
| 41 |
+
tuple_ = _encode_range(int_, 0)
|
| 42 |
+
pos = bisect.bisect_left(ranges, tuple_)
|
| 43 |
+
# we could be immediately ahead of a tuple (start, end)
|
| 44 |
+
# with start < int_ <= end
|
| 45 |
+
if pos > 0:
|
| 46 |
+
left, right = _decode_range(ranges[pos-1])
|
| 47 |
+
if left <= int_ < right:
|
| 48 |
+
return True
|
| 49 |
+
# or we could be immediately behind a tuple (int_, end)
|
| 50 |
+
if pos < len(ranges):
|
| 51 |
+
left, _ = _decode_range(ranges[pos])
|
| 52 |
+
if left == int_:
|
| 53 |
+
return True
|
| 54 |
+
return False
|
.venv/lib/python3.11/site-packages/pip/_vendor/idna/package_data.py
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
|
|
|
| 1 |
+
__version__ = '3.4'
|
| 2 |
+
|
.venv/lib/python3.11/site-packages/pip/_vendor/idna/py.typed
ADDED
|
File without changes
|
.venv/lib/python3.11/site-packages/pip/_vendor/idna/uts46data.py
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
.venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/__init__.cpython-311.pyc
ADDED
|
Binary file (3.83 kB). View file
|
|
|
.venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/__main__.cpython-311.pyc
ADDED
|
Binary file (774 Bytes). View file
|
|
|
.venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/cmdline.cpython-311.pyc
ADDED
|
Binary file (30.3 kB). View file
|
|
|
.venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/console.cpython-311.pyc
ADDED
|
Binary file (3.04 kB). View file
|
|
|
.venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/filter.cpython-311.pyc
ADDED
|
Binary file (3.5 kB). View file
|
|
|
.venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/formatter.cpython-311.pyc
ADDED
|
Binary file (4.81 kB). View file
|
|
|
.venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/lexer.cpython-311.pyc
ADDED
|
Binary file (42.3 kB). View file
|
|
|
.venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/modeline.cpython-311.pyc
ADDED
|
Binary file (1.72 kB). View file
|
|
|
.venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/plugin.cpython-311.pyc
ADDED
|
Binary file (3.73 kB). View file
|
|
|
.venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/regexopt.cpython-311.pyc
ADDED
|
Binary file (5.02 kB). View file
|
|
|
.venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/scanner.cpython-311.pyc
ADDED
|
Binary file (4.88 kB). View file
|
|
|
.venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/sphinxext.cpython-311.pyc
ADDED
|
Binary file (12.8 kB). View file
|
|
|
.venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/style.cpython-311.pyc
ADDED
|
Binary file (7.42 kB). View file
|
|
|
.venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/token.cpython-311.pyc
ADDED
|
Binary file (7.46 kB). View file
|
|
|
.venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/unistring.cpython-311.pyc
ADDED
|
Binary file (33.8 kB). View file
|
|
|
.venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/util.cpython-311.pyc
ADDED
|
Binary file (15.7 kB). View file
|
|
|
.venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__init__.py
ADDED
|
@@ -0,0 +1,158 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""
|
| 2 |
+
pygments.formatters
|
| 3 |
+
~~~~~~~~~~~~~~~~~~~
|
| 4 |
+
|
| 5 |
+
Pygments formatters.
|
| 6 |
+
|
| 7 |
+
:copyright: Copyright 2006-2023 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 |
+
"""
|
| 72 |
+
Return an instance of a :class:`.Formatter` subclass that has `alias` in its
|
| 73 |
+
aliases list. The formatter is given the `options` at its instantiation.
|
| 74 |
+
|
| 75 |
+
Will raise :exc:`pygments.util.ClassNotFound` if no formatter with that
|
| 76 |
+
alias is found.
|
| 77 |
+
"""
|
| 78 |
+
cls = find_formatter_class(_alias)
|
| 79 |
+
if cls is None:
|
| 80 |
+
raise ClassNotFound("no formatter found for name %r" % _alias)
|
| 81 |
+
return cls(**options)
|
| 82 |
+
|
| 83 |
+
|
| 84 |
+
def load_formatter_from_file(filename, formattername="CustomFormatter", **options):
|
| 85 |
+
"""
|
| 86 |
+
Return a `Formatter` subclass instance loaded from the provided file, relative
|
| 87 |
+
to the current directory.
|
| 88 |
+
|
| 89 |
+
The file is expected to contain a Formatter class named ``formattername``
|
| 90 |
+
(by default, CustomFormatter). Users should be very careful with the input, because
|
| 91 |
+
this method is equivalent to running ``eval()`` on the input file. The formatter is
|
| 92 |
+
given the `options` at its instantiation.
|
| 93 |
+
|
| 94 |
+
:exc:`pygments.util.ClassNotFound` is raised if there are any errors loading
|
| 95 |
+
the formatter.
|
| 96 |
+
|
| 97 |
+
.. versionadded:: 2.2
|
| 98 |
+
"""
|
| 99 |
+
try:
|
| 100 |
+
# This empty dict will contain the namespace for the exec'd file
|
| 101 |
+
custom_namespace = {}
|
| 102 |
+
with open(filename, 'rb') as f:
|
| 103 |
+
exec(f.read(), custom_namespace)
|
| 104 |
+
# Retrieve the class `formattername` from that namespace
|
| 105 |
+
if formattername not in custom_namespace:
|
| 106 |
+
raise ClassNotFound('no valid %s class found in %s' %
|
| 107 |
+
(formattername, filename))
|
| 108 |
+
formatter_class = custom_namespace[formattername]
|
| 109 |
+
# And finally instantiate it with the options
|
| 110 |
+
return formatter_class(**options)
|
| 111 |
+
except OSError as err:
|
| 112 |
+
raise ClassNotFound('cannot read %s: %s' % (filename, err))
|
| 113 |
+
except ClassNotFound:
|
| 114 |
+
raise
|
| 115 |
+
except Exception as err:
|
| 116 |
+
raise ClassNotFound('error when loading custom formatter: %s' % err)
|
| 117 |
+
|
| 118 |
+
|
| 119 |
+
def get_formatter_for_filename(fn, **options):
|
| 120 |
+
"""
|
| 121 |
+
Return a :class:`.Formatter` subclass instance that has a filename pattern
|
| 122 |
+
matching `fn`. The formatter is given the `options` at its instantiation.
|
| 123 |
+
|
| 124 |
+
Will raise :exc:`pygments.util.ClassNotFound` if no formatter for that filename
|
| 125 |
+
is found.
|
| 126 |
+
"""
|
| 127 |
+
fn = basename(fn)
|
| 128 |
+
for modname, name, _, filenames, _ in FORMATTERS.values():
|
| 129 |
+
for filename in filenames:
|
| 130 |
+
if _fn_matches(fn, filename):
|
| 131 |
+
if name not in _formatter_cache:
|
| 132 |
+
_load_formatters(modname)
|
| 133 |
+
return _formatter_cache[name](**options)
|
| 134 |
+
for cls in find_plugin_formatters():
|
| 135 |
+
for filename in cls.filenames:
|
| 136 |
+
if _fn_matches(fn, filename):
|
| 137 |
+
return cls(**options)
|
| 138 |
+
raise ClassNotFound("no formatter found for file name %r" % fn)
|
| 139 |
+
|
| 140 |
+
|
| 141 |
+
class _automodule(types.ModuleType):
|
| 142 |
+
"""Automatically import formatters."""
|
| 143 |
+
|
| 144 |
+
def __getattr__(self, name):
|
| 145 |
+
info = FORMATTERS.get(name)
|
| 146 |
+
if info:
|
| 147 |
+
_load_formatters(info[0])
|
| 148 |
+
cls = _formatter_cache[info[1]]
|
| 149 |
+
setattr(self, name, cls)
|
| 150 |
+
return cls
|
| 151 |
+
raise AttributeError(name)
|
| 152 |
+
|
| 153 |
+
|
| 154 |
+
oldmod = sys.modules[__name__]
|
| 155 |
+
newmod = _automodule(__name__)
|
| 156 |
+
newmod.__dict__.update(oldmod.__dict__)
|
| 157 |
+
sys.modules[__name__] = newmod
|
| 158 |
+
del newmod.newmod, newmod.oldmod, newmod.sys, newmod.types
|
.venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/__init__.cpython-311.pyc
ADDED
|
Binary file (7.76 kB). View file
|
|
|
.venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/_mapping.cpython-311.pyc
ADDED
|
Binary file (4.22 kB). View file
|
|
|
.venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/bbcode.cpython-311.pyc
ADDED
|
Binary file (4.47 kB). View file
|
|
|
.venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/groff.cpython-311.pyc
ADDED
|
Binary file (7.85 kB). View file
|
|
|
.venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/html.cpython-311.pyc
ADDED
|
Binary file (42.6 kB). View file
|
|
|
.venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/img.cpython-311.pyc
ADDED
|
Binary file (28.6 kB). View file
|
|
|
.venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/irc.cpython-311.pyc
ADDED
|
Binary file (6.4 kB). View file
|
|
|
.venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/latex.cpython-311.pyc
ADDED
|
Binary file (21.8 kB). View file
|
|
|
.venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/other.cpython-311.pyc
ADDED
|
Binary file (7.63 kB). View file
|
|
|
.venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/pangomarkup.cpython-311.pyc
ADDED
|
Binary file (3.17 kB). View file
|
|
|
.venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/rtf.cpython-311.pyc
ADDED
|
Binary file (6.84 kB). View file
|
|
|
.venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/svg.cpython-311.pyc
ADDED
|
Binary file (9.66 kB). View file
|
|
|
.venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/terminal.cpython-311.pyc
ADDED
|
Binary file (6.04 kB). View file
|
|
|
.venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/terminal256.cpython-311.pyc
ADDED
|
Binary file (16.4 kB). View file
|
|
|
.venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/_mapping.py
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Automatically generated by scripts/gen_mapfiles.py.
|
| 2 |
+
# DO NOT EDIT BY HAND; run `tox -e mapfiles` instead.
|
| 3 |
+
|
| 4 |
+
FORMATTERS = {
|
| 5 |
+
'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.'),
|
| 6 |
+
'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.'),
|
| 7 |
+
'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.'),
|
| 8 |
+
'GroffFormatter': ('pygments.formatters.groff', 'groff', ('groff', 'troff', 'roff'), (), 'Format tokens with groff escapes to change their color and font style.'),
|
| 9 |
+
'HtmlFormatter': ('pygments.formatters.html', 'HTML', ('html',), ('*.html', '*.htm'), "Format tokens as HTML 4 ``<span>`` tags. By default, the content is enclosed in a ``<pre>`` tag, itself wrapped in a ``<div>`` tag (but see the `nowrap` option). The ``<div>``'s CSS class can be set by the `cssclass` option."),
|
| 10 |
+
'IRCFormatter': ('pygments.formatters.irc', 'IRC', ('irc', 'IRC'), (), 'Format tokens with IRC color sequences'),
|
| 11 |
+
'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.'),
|
| 12 |
+
'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.'),
|
| 13 |
+
'LatexFormatter': ('pygments.formatters.latex', 'LaTeX', ('latex', 'tex'), ('*.tex',), 'Format tokens as LaTeX code. This needs the `fancyvrb` and `color` standard packages.'),
|
| 14 |
+
'NullFormatter': ('pygments.formatters.other', 'Text only', ('text', 'null'), ('*.txt',), 'Output the text unchanged without any formatting.'),
|
| 15 |
+
'PangoMarkupFormatter': ('pygments.formatters.pangomarkup', 'Pango Markup', ('pango', 'pangomarkup'), (), 'Format tokens as Pango Markup code. It can then be rendered to an SVG.'),
|
| 16 |
+
'RawTokenFormatter': ('pygments.formatters.other', 'Raw tokens', ('raw', 'tokens'), ('*.raw',), 'Format tokens as a raw representation for storing token streams.'),
|
| 17 |
+
'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.'),
|
| 18 |
+
'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.'),
|
| 19 |
+
'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.'),
|
| 20 |
+
'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.'),
|
| 21 |
+
'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.'),
|
| 22 |
+
'TestcaseFormatter': ('pygments.formatters.other', 'Testcase', ('testcase',), (), 'Format tokens as appropriate for a new testcase.'),
|
| 23 |
+
}
|
.venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/html.py
ADDED
|
@@ -0,0 +1,989 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""
|
| 2 |
+
pygments.formatters.html
|
| 3 |
+
~~~~~~~~~~~~~~~~~~~~~~~~
|
| 4 |
+
|
| 5 |
+
Formatter for HTML output.
|
| 6 |
+
|
| 7 |
+
:copyright: Copyright 2006-2023 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('&'): '&',
|
| 31 |
+
ord('<'): '<',
|
| 32 |
+
ord('>'): '>',
|
| 33 |
+
ord('"'): '"',
|
| 34 |
+
ord("'"): ''',
|
| 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-2023 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-2023 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. By default, the content is enclosed
|
| 116 |
+
in a ``<pre>`` tag, itself wrapped in a ``<div>`` tag (but see the `nowrap` option).
|
| 117 |
+
The ``<div>``'s CSS class can be set by the `cssclass` 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 |
+
A list of lines can be specified using the `hl_lines` option to make these
|
| 144 |
+
lines highlighted (as of Pygments 0.11).
|
| 145 |
+
|
| 146 |
+
With the `full` option, a complete HTML 4 document is output, including
|
| 147 |
+
the style definitions inside a ``<style>`` tag, or in a separate file if
|
| 148 |
+
the `cssfile` option is given.
|
| 149 |
+
|
| 150 |
+
When `tagsfile` is set to the path of a ctags index file, it is used to
|
| 151 |
+
generate hyperlinks from names to their definition. You must enable
|
| 152 |
+
`lineanchors` and run ctags with the `-n` option for this to work. The
|
| 153 |
+
`python-ctags` module from PyPI must be installed to use this feature;
|
| 154 |
+
otherwise a `RuntimeError` will be raised.
|
| 155 |
+
|
| 156 |
+
The `get_style_defs(arg='')` method of a `HtmlFormatter` returns a string
|
| 157 |
+
containing CSS rules for the CSS classes used by the formatter. The
|
| 158 |
+
argument `arg` can be used to specify additional CSS selectors that
|
| 159 |
+
are prepended to the classes. A call `fmter.get_style_defs('td .code')`
|
| 160 |
+
would result in the following CSS classes:
|
| 161 |
+
|
| 162 |
+
.. sourcecode:: css
|
| 163 |
+
|
| 164 |
+
td .code .kw { font-weight: bold; color: #00FF00 }
|
| 165 |
+
td .code .cm { color: #999999 }
|
| 166 |
+
...
|
| 167 |
+
|
| 168 |
+
If you have Pygments 0.6 or higher, you can also pass a list or tuple to the
|
| 169 |
+
`get_style_defs()` method to request multiple prefixes for the tokens:
|
| 170 |
+
|
| 171 |
+
.. sourcecode:: python
|
| 172 |
+
|
| 173 |
+
formatter.get_style_defs(['div.syntax pre', 'pre.syntax'])
|
| 174 |
+
|
| 175 |
+
The output would then look like this:
|
| 176 |
+
|
| 177 |
+
.. sourcecode:: css
|
| 178 |
+
|
| 179 |
+
div.syntax pre .kw,
|
| 180 |
+
pre.syntax .kw { font-weight: bold; color: #00FF00 }
|
| 181 |
+
div.syntax pre .cm,
|
| 182 |
+
pre.syntax .cm { color: #999999 }
|
| 183 |
+
...
|
| 184 |
+
|
| 185 |
+
Additional options accepted:
|
| 186 |
+
|
| 187 |
+
`nowrap`
|
| 188 |
+
If set to ``True``, don't add a ``<pre>`` and a ``<div>`` tag
|
| 189 |
+
around the tokens. This disables most other options (default: ``False``).
|
| 190 |
+
|
| 191 |
+
`full`
|
| 192 |
+
Tells the formatter to output a "full" document, i.e. a complete
|
| 193 |
+
self-contained document (default: ``False``).
|
| 194 |
+
|
| 195 |
+
`title`
|
| 196 |
+
If `full` is true, the title that should be used to caption the
|
| 197 |
+
document (default: ``''``).
|
| 198 |
+
|
| 199 |
+
`style`
|
| 200 |
+
The style to use, can be a string or a Style subclass (default:
|
| 201 |
+
``'default'``). This option has no effect if the `cssfile`
|
| 202 |
+
and `noclobber_cssfile` option are given and the file specified in
|
| 203 |
+
`cssfile` exists.
|
| 204 |
+
|
| 205 |
+
`noclasses`
|
| 206 |
+
If set to true, token ``<span>`` tags (as well as line number elements)
|
| 207 |
+
will not use CSS classes, but inline styles. This is not recommended
|
| 208 |
+
for larger pieces of code since it increases output size by quite a bit
|
| 209 |
+
(default: ``False``).
|
| 210 |
+
|
| 211 |
+
`classprefix`
|
| 212 |
+
Since the token types use relatively short class names, they may clash
|
| 213 |
+
with some of your own class names. In this case you can use the
|
| 214 |
+
`classprefix` option to give a string to prepend to all Pygments-generated
|
| 215 |
+
CSS class names for token types.
|
| 216 |
+
Note that this option also affects the output of `get_style_defs()`.
|
| 217 |
+
|
| 218 |
+
`cssclass`
|
| 219 |
+
CSS class for the wrapping ``<div>`` tag (default: ``'highlight'``).
|
| 220 |
+
If you set this option, the default selector for `get_style_defs()`
|
| 221 |
+
will be this class.
|
| 222 |
+
|
| 223 |
+
.. versionadded:: 0.9
|
| 224 |
+
If you select the ``'table'`` line numbers, the wrapping table will
|
| 225 |
+
have a CSS class of this string plus ``'table'``, the default is
|
| 226 |
+
accordingly ``'highlighttable'``.
|
| 227 |
+
|
| 228 |
+
`cssstyles`
|
| 229 |
+
Inline CSS styles for the wrapping ``<div>`` tag (default: ``''``).
|
| 230 |
+
|
| 231 |
+
`prestyles`
|
| 232 |
+
Inline CSS styles for the ``<pre>`` tag (default: ``''``).
|
| 233 |
+
|
| 234 |
+
.. versionadded:: 0.11
|
| 235 |
+
|
| 236 |
+
`cssfile`
|
| 237 |
+
If the `full` option is true and this option is given, it must be the
|
| 238 |
+
name of an external file. If the filename does not include an absolute
|
| 239 |
+
path, the file's path will be assumed to be relative to the main output
|
| 240 |
+
file's path, if the latter can be found. The stylesheet is then written
|
| 241 |
+
to this file instead of the HTML file.
|
| 242 |
+
|
| 243 |
+
.. versionadded:: 0.6
|
| 244 |
+
|
| 245 |
+
`noclobber_cssfile`
|
| 246 |
+
If `cssfile` is given and the specified file exists, the css file will
|
| 247 |
+
not be overwritten. This allows the use of the `full` option in
|
| 248 |
+
combination with a user specified css file. Default is ``False``.
|
| 249 |
+
|
| 250 |
+
.. versionadded:: 1.1
|
| 251 |
+
|
| 252 |
+
`linenos`
|
| 253 |
+
If set to ``'table'``, output line numbers as a table with two cells,
|
| 254 |
+
one containing the line numbers, the other the whole code. This is
|
| 255 |
+
copy-and-paste-friendly, but may cause alignment problems with some
|
| 256 |
+
browsers or fonts. If set to ``'inline'``, the line numbers will be
|
| 257 |
+
integrated in the ``<pre>`` tag that contains the code (that setting
|
| 258 |
+
is *new in Pygments 0.8*).
|
| 259 |
+
|
| 260 |
+
For compatibility with Pygments 0.7 and earlier, every true value
|
| 261 |
+
except ``'inline'`` means the same as ``'table'`` (in particular, that
|
| 262 |
+
means also ``True``).
|
| 263 |
+
|
| 264 |
+
The default value is ``False``, which means no line numbers at all.
|
| 265 |
+
|
| 266 |
+
**Note:** with the default ("table") line number mechanism, the line
|
| 267 |
+
numbers and code can have different line heights in Internet Explorer
|
| 268 |
+
unless you give the enclosing ``<pre>`` tags an explicit ``line-height``
|
| 269 |
+
CSS property (you get the default line spacing with ``line-height:
|
| 270 |
+
125%``).
|
| 271 |
+
|
| 272 |
+
`hl_lines`
|
| 273 |
+
Specify a list of lines to be highlighted. The line numbers are always
|
| 274 |
+
relative to the input (i.e. the first line is line 1) and are
|
| 275 |
+
independent of `linenostart`.
|
| 276 |
+
|
| 277 |
+
.. versionadded:: 0.11
|
| 278 |
+
|
| 279 |
+
`linenostart`
|
| 280 |
+
The line number for the first line (default: ``1``).
|
| 281 |
+
|
| 282 |
+
`linenostep`
|
| 283 |
+
If set to a number n > 1, only every nth line number is printed.
|
| 284 |
+
|
| 285 |
+
`linenospecial`
|
| 286 |
+
If set to a number n > 0, every nth line number is given the CSS
|
| 287 |
+
class ``"special"`` (default: ``0``).
|
| 288 |
+
|
| 289 |
+
`nobackground`
|
| 290 |
+
If set to ``True``, the formatter won't output the background color
|
| 291 |
+
for the wrapping element (this automatically defaults to ``False``
|
| 292 |
+
when there is no wrapping element [eg: no argument for the
|
| 293 |
+
`get_syntax_defs` method given]) (default: ``False``).
|
| 294 |
+
|
| 295 |
+
.. versionadded:: 0.6
|
| 296 |
+
|
| 297 |
+
`lineseparator`
|
| 298 |
+
This string is output between lines of code. It defaults to ``"\n"``,
|
| 299 |
+
which is enough to break a line inside ``<pre>`` tags, but you can
|
| 300 |
+
e.g. set it to ``"<br>"`` to get HTML line breaks.
|
| 301 |
+
|
| 302 |
+
.. versionadded:: 0.7
|
| 303 |
+
|
| 304 |
+
`lineanchors`
|
| 305 |
+
If set to a nonempty string, e.g. ``foo``, the formatter will wrap each
|
| 306 |
+
output line in an anchor tag with an ``id`` (and `name`) of ``foo-linenumber``.
|
| 307 |
+
This allows easy linking to certain lines.
|
| 308 |
+
|
| 309 |
+
.. versionadded:: 0.9
|
| 310 |
+
|
| 311 |
+
`linespans`
|
| 312 |
+
If set to a nonempty string, e.g. ``foo``, the formatter will wrap each
|
| 313 |
+
output line in a span tag with an ``id`` of ``foo-linenumber``.
|
| 314 |
+
This allows easy access to lines via javascript.
|
| 315 |
+
|
| 316 |
+
.. versionadded:: 1.6
|
| 317 |
+
|
| 318 |
+
`anchorlinenos`
|
| 319 |
+
If set to `True`, will wrap line numbers in <a> tags. Used in
|
| 320 |
+
combination with `linenos` and `lineanchors`.
|
| 321 |
+
|
| 322 |
+
`tagsfile`
|
| 323 |
+
If set to the path of a ctags file, wrap names in anchor tags that
|
| 324 |
+
link to their definitions. `lineanchors` should be used, and the
|
| 325 |
+
tags file should specify line numbers (see the `-n` option to ctags).
|
| 326 |
+
|
| 327 |
+
.. versionadded:: 1.6
|
| 328 |
+
|
| 329 |
+
`tagurlformat`
|
| 330 |
+
A string formatting pattern used to generate links to ctags definitions.
|
| 331 |
+
Available variables are `%(path)s`, `%(fname)s` and `%(fext)s`.
|
| 332 |
+
Defaults to an empty string, resulting in just `#prefix-number` links.
|
| 333 |
+
|
| 334 |
+
.. versionadded:: 1.6
|
| 335 |
+
|
| 336 |
+
`filename`
|
| 337 |
+
A string used to generate a filename when rendering ``<pre>`` blocks,
|
| 338 |
+
for example if displaying source code. If `linenos` is set to
|
| 339 |
+
``'table'`` then the filename will be rendered in an initial row
|
| 340 |
+
containing a single `<th>` which spans both columns.
|
| 341 |
+
|
| 342 |
+
.. versionadded:: 2.1
|
| 343 |
+
|
| 344 |
+
`wrapcode`
|
| 345 |
+
Wrap the code inside ``<pre>`` blocks using ``<code>``, as recommended
|
| 346 |
+
by the HTML5 specification.
|
| 347 |
+
|
| 348 |
+
.. versionadded:: 2.4
|
| 349 |
+
|
| 350 |
+
`debug_token_types`
|
| 351 |
+
Add ``title`` attributes to all token ``<span>`` tags that show the
|
| 352 |
+
name of the token.
|
| 353 |
+
|
| 354 |
+
.. versionadded:: 2.10
|
| 355 |
+
|
| 356 |
+
|
| 357 |
+
**Subclassing the HTML formatter**
|
| 358 |
+
|
| 359 |
+
.. versionadded:: 0.7
|
| 360 |
+
|
| 361 |
+
The HTML formatter is now built in a way that allows easy subclassing, thus
|
| 362 |
+
customizing the output HTML code. The `format()` method calls
|
| 363 |
+
`self._format_lines()` which returns a generator that yields tuples of ``(1,
|
| 364 |
+
line)``, where the ``1`` indicates that the ``line`` is a line of the
|
| 365 |
+
formatted source code.
|
| 366 |
+
|
| 367 |
+
If the `nowrap` option is set, the generator is the iterated over and the
|
| 368 |
+
resulting HTML is output.
|
| 369 |
+
|
| 370 |
+
Otherwise, `format()` calls `self.wrap()`, which wraps the generator with
|
| 371 |
+
other generators. These may add some HTML code to the one generated by
|
| 372 |
+
`_format_lines()`, either by modifying the lines generated by the latter,
|
| 373 |
+
then yielding them again with ``(1, line)``, and/or by yielding other HTML
|
| 374 |
+
code before or after the lines, with ``(0, html)``. The distinction between
|
| 375 |
+
source lines and other code makes it possible to wrap the generator multiple
|
| 376 |
+
times.
|
| 377 |
+
|
| 378 |
+
The default `wrap()` implementation adds a ``<div>`` and a ``<pre>`` tag.
|
| 379 |
+
|
| 380 |
+
A custom `HtmlFormatter` subclass could look like this:
|
| 381 |
+
|
| 382 |
+
.. sourcecode:: python
|
| 383 |
+
|
| 384 |
+
class CodeHtmlFormatter(HtmlFormatter):
|
| 385 |
+
|
| 386 |
+
def wrap(self, source, *, include_div):
|
| 387 |
+
return self._wrap_code(source)
|
| 388 |
+
|
| 389 |
+
def _wrap_code(self, source):
|
| 390 |
+
yield 0, '<code>'
|
| 391 |
+
for i, t in source:
|
| 392 |
+
if i == 1:
|
| 393 |
+
# it's a line of formatted code
|
| 394 |
+
t += '<br>'
|
| 395 |
+
yield i, t
|
| 396 |
+
yield 0, '</code>'
|
| 397 |
+
|
| 398 |
+
This results in wrapping the formatted lines with a ``<code>`` tag, where the
|
| 399 |
+
source lines are broken using ``<br>`` tags.
|
| 400 |
+
|
| 401 |
+
After calling `wrap()`, the `format()` method also adds the "line numbers"
|
| 402 |
+
and/or "full document" wrappers if the respective options are set. Then, all
|
| 403 |
+
HTML yielded by the wrapped generator is output.
|
| 404 |
+
"""
|
| 405 |
+
|
| 406 |
+
name = 'HTML'
|
| 407 |
+
aliases = ['html']
|
| 408 |
+
filenames = ['*.html', '*.htm']
|
| 409 |
+
|
| 410 |
+
def __init__(self, **options):
|
| 411 |
+
Formatter.__init__(self, **options)
|
| 412 |
+
self.title = self._decodeifneeded(self.title)
|
| 413 |
+
self.nowrap = get_bool_opt(options, 'nowrap', False)
|
| 414 |
+
self.noclasses = get_bool_opt(options, 'noclasses', False)
|
| 415 |
+
self.classprefix = options.get('classprefix', '')
|
| 416 |
+
self.cssclass = self._decodeifneeded(options.get('cssclass', 'highlight'))
|
| 417 |
+
self.cssstyles = self._decodeifneeded(options.get('cssstyles', ''))
|
| 418 |
+
self.prestyles = self._decodeifneeded(options.get('prestyles', ''))
|
| 419 |
+
self.cssfile = self._decodeifneeded(options.get('cssfile', ''))
|
| 420 |
+
self.noclobber_cssfile = get_bool_opt(options, 'noclobber_cssfile', False)
|
| 421 |
+
self.tagsfile = self._decodeifneeded(options.get('tagsfile', ''))
|
| 422 |
+
self.tagurlformat = self._decodeifneeded(options.get('tagurlformat', ''))
|
| 423 |
+
self.filename = self._decodeifneeded(options.get('filename', ''))
|
| 424 |
+
self.wrapcode = get_bool_opt(options, 'wrapcode', False)
|
| 425 |
+
self.span_element_openers = {}
|
| 426 |
+
self.debug_token_types = get_bool_opt(options, 'debug_token_types', False)
|
| 427 |
+
|
| 428 |
+
if self.tagsfile:
|
| 429 |
+
if not ctags:
|
| 430 |
+
raise RuntimeError('The "ctags" package must to be installed '
|
| 431 |
+
'to be able to use the "tagsfile" feature.')
|
| 432 |
+
self._ctags = ctags.CTags(self.tagsfile)
|
| 433 |
+
|
| 434 |
+
linenos = options.get('linenos', False)
|
| 435 |
+
if linenos == 'inline':
|
| 436 |
+
self.linenos = 2
|
| 437 |
+
elif linenos:
|
| 438 |
+
# compatibility with <= 0.7
|
| 439 |
+
self.linenos = 1
|
| 440 |
+
else:
|
| 441 |
+
self.linenos = 0
|
| 442 |
+
self.linenostart = abs(get_int_opt(options, 'linenostart', 1))
|
| 443 |
+
self.linenostep = abs(get_int_opt(options, 'linenostep', 1))
|
| 444 |
+
self.linenospecial = abs(get_int_opt(options, 'linenospecial', 0))
|
| 445 |
+
self.nobackground = get_bool_opt(options, 'nobackground', False)
|
| 446 |
+
self.lineseparator = options.get('lineseparator', '\n')
|
| 447 |
+
self.lineanchors = options.get('lineanchors', '')
|
| 448 |
+
self.linespans = options.get('linespans', '')
|
| 449 |
+
self.anchorlinenos = get_bool_opt(options, 'anchorlinenos', False)
|
| 450 |
+
self.hl_lines = set()
|
| 451 |
+
for lineno in get_list_opt(options, 'hl_lines', []):
|
| 452 |
+
try:
|
| 453 |
+
self.hl_lines.add(int(lineno))
|
| 454 |
+
except ValueError:
|
| 455 |
+
pass
|
| 456 |
+
|
| 457 |
+
self._create_stylesheet()
|
| 458 |
+
|
| 459 |
+
def _get_css_class(self, ttype):
|
| 460 |
+
"""Return the css class of this token type prefixed with
|
| 461 |
+
the classprefix option."""
|
| 462 |
+
ttypeclass = _get_ttype_class(ttype)
|
| 463 |
+
if ttypeclass:
|
| 464 |
+
return self.classprefix + ttypeclass
|
| 465 |
+
return ''
|
| 466 |
+
|
| 467 |
+
def _get_css_classes(self, ttype):
|
| 468 |
+
"""Return the CSS classes of this token type prefixed with the classprefix option."""
|
| 469 |
+
cls = self._get_css_class(ttype)
|
| 470 |
+
while ttype not in STANDARD_TYPES:
|
| 471 |
+
ttype = ttype.parent
|
| 472 |
+
cls = self._get_css_class(ttype) + ' ' + cls
|
| 473 |
+
return cls or ''
|
| 474 |
+
|
| 475 |
+
def _get_css_inline_styles(self, ttype):
|
| 476 |
+
"""Return the inline CSS styles for this token type."""
|
| 477 |
+
cclass = self.ttype2class.get(ttype)
|
| 478 |
+
while cclass is None:
|
| 479 |
+
ttype = ttype.parent
|
| 480 |
+
cclass = self.ttype2class.get(ttype)
|
| 481 |
+
return cclass or ''
|
| 482 |
+
|
| 483 |
+
def _create_stylesheet(self):
|
| 484 |
+
t2c = self.ttype2class = {Token: ''}
|
| 485 |
+
c2s = self.class2style = {}
|
| 486 |
+
for ttype, ndef in self.style:
|
| 487 |
+
name = self._get_css_class(ttype)
|
| 488 |
+
style = ''
|
| 489 |
+
if ndef['color']:
|
| 490 |
+
style += 'color: %s; ' % webify(ndef['color'])
|
| 491 |
+
if ndef['bold']:
|
| 492 |
+
style += 'font-weight: bold; '
|
| 493 |
+
if ndef['italic']:
|
| 494 |
+
style += 'font-style: italic; '
|
| 495 |
+
if ndef['underline']:
|
| 496 |
+
style += 'text-decoration: underline; '
|
| 497 |
+
if ndef['bgcolor']:
|
| 498 |
+
style += 'background-color: %s; ' % webify(ndef['bgcolor'])
|
| 499 |
+
if ndef['border']:
|
| 500 |
+
style += 'border: 1px solid %s; ' % webify(ndef['border'])
|
| 501 |
+
if style:
|
| 502 |
+
t2c[ttype] = name
|
| 503 |
+
# save len(ttype) to enable ordering the styles by
|
| 504 |
+
# hierarchy (necessary for CSS cascading rules!)
|
| 505 |
+
c2s[name] = (style[:-2], ttype, len(ttype))
|
| 506 |
+
|
| 507 |
+
def get_style_defs(self, arg=None):
|
| 508 |
+
"""
|
| 509 |
+
Return CSS style definitions for the classes produced by the current
|
| 510 |
+
highlighting style. ``arg`` can be a string or list of selectors to
|
| 511 |
+
insert before the token type classes.
|
| 512 |
+
"""
|
| 513 |
+
style_lines = []
|
| 514 |
+
|
| 515 |
+
style_lines.extend(self.get_linenos_style_defs())
|
| 516 |
+
style_lines.extend(self.get_background_style_defs(arg))
|
| 517 |
+
style_lines.extend(self.get_token_style_defs(arg))
|
| 518 |
+
|
| 519 |
+
return '\n'.join(style_lines)
|
| 520 |
+
|
| 521 |
+
def get_token_style_defs(self, arg=None):
|
| 522 |
+
prefix = self.get_css_prefix(arg)
|
| 523 |
+
|
| 524 |
+
styles = [
|
| 525 |
+
(level, ttype, cls, style)
|
| 526 |
+
for cls, (style, ttype, level) in self.class2style.items()
|
| 527 |
+
if cls and style
|
| 528 |
+
]
|
| 529 |
+
styles.sort()
|
| 530 |
+
|
| 531 |
+
lines = [
|
| 532 |
+
'%s { %s } /* %s */' % (prefix(cls), style, repr(ttype)[6:])
|
| 533 |
+
for (level, ttype, cls, style) in styles
|
| 534 |
+
]
|
| 535 |
+
|
| 536 |
+
return lines
|
| 537 |
+
|
| 538 |
+
def get_background_style_defs(self, arg=None):
|
| 539 |
+
prefix = self.get_css_prefix(arg)
|
| 540 |
+
bg_color = self.style.background_color
|
| 541 |
+
hl_color = self.style.highlight_color
|
| 542 |
+
|
| 543 |
+
lines = []
|
| 544 |
+
|
| 545 |
+
if arg and not self.nobackground and bg_color is not None:
|
| 546 |
+
text_style = ''
|
| 547 |
+
if Text in self.ttype2class:
|
| 548 |
+
text_style = ' ' + self.class2style[self.ttype2class[Text]][0]
|
| 549 |
+
lines.insert(
|
| 550 |
+
0, '%s{ background: %s;%s }' % (
|
| 551 |
+
prefix(''), bg_color, text_style
|
| 552 |
+
)
|
| 553 |
+
)
|
| 554 |
+
if hl_color is not None:
|
| 555 |
+
lines.insert(
|
| 556 |
+
0, '%s { background-color: %s }' % (prefix('hll'), hl_color)
|
| 557 |
+
)
|
| 558 |
+
|
| 559 |
+
return lines
|
| 560 |
+
|
| 561 |
+
def get_linenos_style_defs(self):
|
| 562 |
+
lines = [
|
| 563 |
+
'pre { %s }' % self._pre_style,
|
| 564 |
+
'td.linenos .normal { %s }' % self._linenos_style,
|
| 565 |
+
'span.linenos { %s }' % self._linenos_style,
|
| 566 |
+
'td.linenos .special { %s }' % self._linenos_special_style,
|
| 567 |
+
'span.linenos.special { %s }' % self._linenos_special_style,
|
| 568 |
+
]
|
| 569 |
+
|
| 570 |
+
return lines
|
| 571 |
+
|
| 572 |
+
def get_css_prefix(self, arg):
|
| 573 |
+
if arg is None:
|
| 574 |
+
arg = ('cssclass' in self.options and '.'+self.cssclass or '')
|
| 575 |
+
if isinstance(arg, str):
|
| 576 |
+
args = [arg]
|
| 577 |
+
else:
|
| 578 |
+
args = list(arg)
|
| 579 |
+
|
| 580 |
+
def prefix(cls):
|
| 581 |
+
if cls:
|
| 582 |
+
cls = '.' + cls
|
| 583 |
+
tmp = []
|
| 584 |
+
for arg in args:
|
| 585 |
+
tmp.append((arg and arg + ' ' or '') + cls)
|
| 586 |
+
return ', '.join(tmp)
|
| 587 |
+
|
| 588 |
+
return prefix
|
| 589 |
+
|
| 590 |
+
@property
|
| 591 |
+
def _pre_style(self):
|
| 592 |
+
return 'line-height: 125%;'
|
| 593 |
+
|
| 594 |
+
@property
|
| 595 |
+
def _linenos_style(self):
|
| 596 |
+
return 'color: %s; background-color: %s; padding-left: 5px; padding-right: 5px;' % (
|
| 597 |
+
self.style.line_number_color,
|
| 598 |
+
self.style.line_number_background_color
|
| 599 |
+
)
|
| 600 |
+
|
| 601 |
+
@property
|
| 602 |
+
def _linenos_special_style(self):
|
| 603 |
+
return 'color: %s; background-color: %s; padding-left: 5px; padding-right: 5px;' % (
|
| 604 |
+
self.style.line_number_special_color,
|
| 605 |
+
self.style.line_number_special_background_color
|
| 606 |
+
)
|
| 607 |
+
|
| 608 |
+
def _decodeifneeded(self, value):
|
| 609 |
+
if isinstance(value, bytes):
|
| 610 |
+
if self.encoding:
|
| 611 |
+
return value.decode(self.encoding)
|
| 612 |
+
return value.decode()
|
| 613 |
+
return value
|
| 614 |
+
|
| 615 |
+
def _wrap_full(self, inner, outfile):
|
| 616 |
+
if self.cssfile:
|
| 617 |
+
if os.path.isabs(self.cssfile):
|
| 618 |
+
# it's an absolute filename
|
| 619 |
+
cssfilename = self.cssfile
|
| 620 |
+
else:
|
| 621 |
+
try:
|
| 622 |
+
filename = outfile.name
|
| 623 |
+
if not filename or filename[0] == '<':
|
| 624 |
+
# pseudo files, e.g. name == '<fdopen>'
|
| 625 |
+
raise AttributeError
|
| 626 |
+
cssfilename = os.path.join(os.path.dirname(filename),
|
| 627 |
+
self.cssfile)
|
| 628 |
+
except AttributeError:
|
| 629 |
+
print('Note: Cannot determine output file name, '
|
| 630 |
+
'using current directory as base for the CSS file name',
|
| 631 |
+
file=sys.stderr)
|
| 632 |
+
cssfilename = self.cssfile
|
| 633 |
+
# write CSS file only if noclobber_cssfile isn't given as an option.
|
| 634 |
+
try:
|
| 635 |
+
if not os.path.exists(cssfilename) or not self.noclobber_cssfile:
|
| 636 |
+
with open(cssfilename, "w", encoding="utf-8") as cf:
|
| 637 |
+
cf.write(CSSFILE_TEMPLATE %
|
| 638 |
+
{'styledefs': self.get_style_defs('body')})
|
| 639 |
+
except OSError as err:
|
| 640 |
+
err.strerror = 'Error writing CSS file: ' + err.strerror
|
| 641 |
+
raise
|
| 642 |
+
|
| 643 |
+
yield 0, (DOC_HEADER_EXTERNALCSS %
|
| 644 |
+
dict(title=self.title,
|
| 645 |
+
cssfile=self.cssfile,
|
| 646 |
+
encoding=self.encoding))
|
| 647 |
+
else:
|
| 648 |
+
yield 0, (DOC_HEADER %
|
| 649 |
+
dict(title=self.title,
|
| 650 |
+
styledefs=self.get_style_defs('body'),
|
| 651 |
+
encoding=self.encoding))
|
| 652 |
+
|
| 653 |
+
yield from inner
|
| 654 |
+
yield 0, DOC_FOOTER
|
| 655 |
+
|
| 656 |
+
def _wrap_tablelinenos(self, inner):
|
| 657 |
+
dummyoutfile = StringIO()
|
| 658 |
+
lncount = 0
|
| 659 |
+
for t, line in inner:
|
| 660 |
+
if t:
|
| 661 |
+
lncount += 1
|
| 662 |
+
dummyoutfile.write(line)
|
| 663 |
+
|
| 664 |
+
fl = self.linenostart
|
| 665 |
+
mw = len(str(lncount + fl - 1))
|
| 666 |
+
sp = self.linenospecial
|
| 667 |
+
st = self.linenostep
|
| 668 |
+
anchor_name = self.lineanchors or self.linespans
|
| 669 |
+
aln = self.anchorlinenos
|
| 670 |
+
nocls = self.noclasses
|
| 671 |
+
|
| 672 |
+
lines = []
|
| 673 |
+
|
| 674 |
+
for i in range(fl, fl+lncount):
|
| 675 |
+
print_line = i % st == 0
|
| 676 |
+
special_line = sp and i % sp == 0
|
| 677 |
+
|
| 678 |
+
if print_line:
|
| 679 |
+
line = '%*d' % (mw, i)
|
| 680 |
+
if aln:
|
| 681 |
+
line = '<a href="#%s-%d">%s</a>' % (anchor_name, i, line)
|
| 682 |
+
else:
|
| 683 |
+
line = ' ' * mw
|
| 684 |
+
|
| 685 |
+
if nocls:
|
| 686 |
+
if special_line:
|
| 687 |
+
style = ' style="%s"' % self._linenos_special_style
|
| 688 |
+
else:
|
| 689 |
+
style = ' style="%s"' % self._linenos_style
|
| 690 |
+
else:
|
| 691 |
+
if special_line:
|
| 692 |
+
style = ' class="special"'
|
| 693 |
+
else:
|
| 694 |
+
style = ' class="normal"'
|
| 695 |
+
|
| 696 |
+
if style:
|
| 697 |
+
line = '<span%s>%s</span>' % (style, line)
|
| 698 |
+
|
| 699 |
+
lines.append(line)
|
| 700 |
+
|
| 701 |
+
ls = '\n'.join(lines)
|
| 702 |
+
|
| 703 |
+
# If a filename was specified, we can't put it into the code table as it
|
| 704 |
+
# would misalign the line numbers. Hence we emit a separate row for it.
|
| 705 |
+
filename_tr = ""
|
| 706 |
+
if self.filename:
|
| 707 |
+
filename_tr = (
|
| 708 |
+
'<tr><th colspan="2" class="filename">'
|
| 709 |
+
'<span class="filename">' + self.filename + '</span>'
|
| 710 |
+
'</th></tr>')
|
| 711 |
+
|
| 712 |
+
# in case you wonder about the seemingly redundant <div> here: since the
|
| 713 |
+
# content in the other cell also is wrapped in a div, some browsers in
|
| 714 |
+
# some configurations seem to mess up the formatting...
|
| 715 |
+
yield 0, (f'<table class="{self.cssclass}table">' + filename_tr +
|
| 716 |
+
'<tr><td class="linenos"><div class="linenodiv"><pre>' +
|
| 717 |
+
ls + '</pre></div></td><td class="code">')
|
| 718 |
+
yield 0, '<div>'
|
| 719 |
+
yield 0, dummyoutfile.getvalue()
|
| 720 |
+
yield 0, '</div>'
|
| 721 |
+
yield 0, '</td></tr></table>'
|
| 722 |
+
|
| 723 |
+
|
| 724 |
+
def _wrap_inlinelinenos(self, inner):
|
| 725 |
+
# need a list of lines since we need the width of a single number :(
|
| 726 |
+
inner_lines = list(inner)
|
| 727 |
+
sp = self.linenospecial
|
| 728 |
+
st = self.linenostep
|
| 729 |
+
num = self.linenostart
|
| 730 |
+
mw = len(str(len(inner_lines) + num - 1))
|
| 731 |
+
anchor_name = self.lineanchors or self.linespans
|
| 732 |
+
aln = self.anchorlinenos
|
| 733 |
+
nocls = self.noclasses
|
| 734 |
+
|
| 735 |
+
for _, inner_line in inner_lines:
|
| 736 |
+
print_line = num % st == 0
|
| 737 |
+
special_line = sp and num % sp == 0
|
| 738 |
+
|
| 739 |
+
if print_line:
|
| 740 |
+
line = '%*d' % (mw, num)
|
| 741 |
+
else:
|
| 742 |
+
line = ' ' * mw
|
| 743 |
+
|
| 744 |
+
if nocls:
|
| 745 |
+
if special_line:
|
| 746 |
+
style = ' style="%s"' % self._linenos_special_style
|
| 747 |
+
else:
|
| 748 |
+
style = ' style="%s"' % self._linenos_style
|
| 749 |
+
else:
|
| 750 |
+
if special_line:
|
| 751 |
+
style = ' class="linenos special"'
|
| 752 |
+
else:
|
| 753 |
+
style = ' class="linenos"'
|
| 754 |
+
|
| 755 |
+
if style:
|
| 756 |
+
linenos = '<span%s>%s</span>' % (style, line)
|
| 757 |
+
else:
|
| 758 |
+
linenos = line
|
| 759 |
+
|
| 760 |
+
if aln:
|
| 761 |
+
yield 1, ('<a href="#%s-%d">%s</a>' % (anchor_name, num, linenos) +
|
| 762 |
+
inner_line)
|
| 763 |
+
else:
|
| 764 |
+
yield 1, linenos + inner_line
|
| 765 |
+
num += 1
|
| 766 |
+
|
| 767 |
+
def _wrap_lineanchors(self, inner):
|
| 768 |
+
s = self.lineanchors
|
| 769 |
+
# subtract 1 since we have to increment i *before* yielding
|
| 770 |
+
i = self.linenostart - 1
|
| 771 |
+
for t, line in inner:
|
| 772 |
+
if t:
|
| 773 |
+
i += 1
|
| 774 |
+
href = "" if self.linenos else ' href="#%s-%d"' % (s, i)
|
| 775 |
+
yield 1, '<a id="%s-%d" name="%s-%d"%s></a>' % (s, i, s, i, href) + line
|
| 776 |
+
else:
|
| 777 |
+
yield 0, line
|
| 778 |
+
|
| 779 |
+
def _wrap_linespans(self, inner):
|
| 780 |
+
s = self.linespans
|
| 781 |
+
i = self.linenostart - 1
|
| 782 |
+
for t, line in inner:
|
| 783 |
+
if t:
|
| 784 |
+
i += 1
|
| 785 |
+
yield 1, '<span id="%s-%d">%s</span>' % (s, i, line)
|
| 786 |
+
else:
|
| 787 |
+
yield 0, line
|
| 788 |
+
|
| 789 |
+
def _wrap_div(self, inner):
|
| 790 |
+
style = []
|
| 791 |
+
if (self.noclasses and not self.nobackground and
|
| 792 |
+
self.style.background_color is not None):
|
| 793 |
+
style.append('background: %s' % (self.style.background_color,))
|
| 794 |
+
if self.cssstyles:
|
| 795 |
+
style.append(self.cssstyles)
|
| 796 |
+
style = '; '.join(style)
|
| 797 |
+
|
| 798 |
+
yield 0, ('<div' + (self.cssclass and ' class="%s"' % self.cssclass) +
|
| 799 |
+
(style and (' style="%s"' % style)) + '>')
|
| 800 |
+
yield from inner
|
| 801 |
+
yield 0, '</div>\n'
|
| 802 |
+
|
| 803 |
+
def _wrap_pre(self, inner):
|
| 804 |
+
style = []
|
| 805 |
+
if self.prestyles:
|
| 806 |
+
style.append(self.prestyles)
|
| 807 |
+
if self.noclasses:
|
| 808 |
+
style.append(self._pre_style)
|
| 809 |
+
style = '; '.join(style)
|
| 810 |
+
|
| 811 |
+
if self.filename and self.linenos != 1:
|
| 812 |
+
yield 0, ('<span class="filename">' + self.filename + '</span>')
|
| 813 |
+
|
| 814 |
+
# the empty span here is to keep leading empty lines from being
|
| 815 |
+
# ignored by HTML parsers
|
| 816 |
+
yield 0, ('<pre' + (style and ' style="%s"' % style) + '><span></span>')
|
| 817 |
+
yield from inner
|
| 818 |
+
yield 0, '</pre>'
|
| 819 |
+
|
| 820 |
+
def _wrap_code(self, inner):
|
| 821 |
+
yield 0, '<code>'
|
| 822 |
+
yield from inner
|
| 823 |
+
yield 0, '</code>'
|
| 824 |
+
|
| 825 |
+
@functools.lru_cache(maxsize=100)
|
| 826 |
+
def _translate_parts(self, value):
|
| 827 |
+
"""HTML-escape a value and split it by newlines."""
|
| 828 |
+
return value.translate(_escape_html_table).split('\n')
|
| 829 |
+
|
| 830 |
+
def _format_lines(self, tokensource):
|
| 831 |
+
"""
|
| 832 |
+
Just format the tokens, without any wrapping tags.
|
| 833 |
+
Yield individual lines.
|
| 834 |
+
"""
|
| 835 |
+
nocls = self.noclasses
|
| 836 |
+
lsep = self.lineseparator
|
| 837 |
+
tagsfile = self.tagsfile
|
| 838 |
+
|
| 839 |
+
lspan = ''
|
| 840 |
+
line = []
|
| 841 |
+
for ttype, value in tokensource:
|
| 842 |
+
try:
|
| 843 |
+
cspan = self.span_element_openers[ttype]
|
| 844 |
+
except KeyError:
|
| 845 |
+
title = ' title="%s"' % '.'.join(ttype) if self.debug_token_types else ''
|
| 846 |
+
if nocls:
|
| 847 |
+
css_style = self._get_css_inline_styles(ttype)
|
| 848 |
+
if css_style:
|
| 849 |
+
css_style = self.class2style[css_style][0]
|
| 850 |
+
cspan = '<span style="%s"%s>' % (css_style, title)
|
| 851 |
+
else:
|
| 852 |
+
cspan = ''
|
| 853 |
+
else:
|
| 854 |
+
css_class = self._get_css_classes(ttype)
|
| 855 |
+
if css_class:
|
| 856 |
+
cspan = '<span class="%s"%s>' % (css_class, title)
|
| 857 |
+
else:
|
| 858 |
+
cspan = ''
|
| 859 |
+
self.span_element_openers[ttype] = cspan
|
| 860 |
+
|
| 861 |
+
parts = self._translate_parts(value)
|
| 862 |
+
|
| 863 |
+
if tagsfile and ttype in Token.Name:
|
| 864 |
+
filename, linenumber = self._lookup_ctag(value)
|
| 865 |
+
if linenumber:
|
| 866 |
+
base, filename = os.path.split(filename)
|
| 867 |
+
if base:
|
| 868 |
+
base += '/'
|
| 869 |
+
filename, extension = os.path.splitext(filename)
|
| 870 |
+
url = self.tagurlformat % {'path': base, 'fname': filename,
|
| 871 |
+
'fext': extension}
|
| 872 |
+
parts[0] = "<a href=\"%s#%s-%d\">%s" % \
|
| 873 |
+
(url, self.lineanchors, linenumber, parts[0])
|
| 874 |
+
parts[-1] = parts[-1] + "</a>"
|
| 875 |
+
|
| 876 |
+
# for all but the last line
|
| 877 |
+
for part in parts[:-1]:
|
| 878 |
+
if line:
|
| 879 |
+
# Also check for part being non-empty, so we avoid creating
|
| 880 |
+
# empty <span> tags
|
| 881 |
+
if lspan != cspan and part:
|
| 882 |
+
line.extend(((lspan and '</span>'), cspan, part,
|
| 883 |
+
(cspan and '</span>'), lsep))
|
| 884 |
+
else: # both are the same, or the current part was empty
|
| 885 |
+
line.extend((part, (lspan and '</span>'), lsep))
|
| 886 |
+
yield 1, ''.join(line)
|
| 887 |
+
line = []
|
| 888 |
+
elif part:
|
| 889 |
+
yield 1, ''.join((cspan, part, (cspan and '</span>'), lsep))
|
| 890 |
+
else:
|
| 891 |
+
yield 1, lsep
|
| 892 |
+
# for the last line
|
| 893 |
+
if line and parts[-1]:
|
| 894 |
+
if lspan != cspan:
|
| 895 |
+
line.extend(((lspan and '</span>'), cspan, parts[-1]))
|
| 896 |
+
lspan = cspan
|
| 897 |
+
else:
|
| 898 |
+
line.append(parts[-1])
|
| 899 |
+
elif parts[-1]:
|
| 900 |
+
line = [cspan, parts[-1]]
|
| 901 |
+
lspan = cspan
|
| 902 |
+
# else we neither have to open a new span nor set lspan
|
| 903 |
+
|
| 904 |
+
if line:
|
| 905 |
+
line.extend(((lspan and '</span>'), lsep))
|
| 906 |
+
yield 1, ''.join(line)
|
| 907 |
+
|
| 908 |
+
def _lookup_ctag(self, token):
|
| 909 |
+
entry = ctags.TagEntry()
|
| 910 |
+
if self._ctags.find(entry, token.encode(), 0):
|
| 911 |
+
return entry['file'], entry['lineNumber']
|
| 912 |
+
else:
|
| 913 |
+
return None, None
|
| 914 |
+
|
| 915 |
+
def _highlight_lines(self, tokensource):
|
| 916 |
+
"""
|
| 917 |
+
Highlighted the lines specified in the `hl_lines` option by
|
| 918 |
+
post-processing the token stream coming from `_format_lines`.
|
| 919 |
+
"""
|
| 920 |
+
hls = self.hl_lines
|
| 921 |
+
|
| 922 |
+
for i, (t, value) in enumerate(tokensource):
|
| 923 |
+
if t != 1:
|
| 924 |
+
yield t, value
|
| 925 |
+
if i + 1 in hls: # i + 1 because Python indexes start at 0
|
| 926 |
+
if self.noclasses:
|
| 927 |
+
style = ''
|
| 928 |
+
if self.style.highlight_color is not None:
|
| 929 |
+
style = (' style="background-color: %s"' %
|
| 930 |
+
(self.style.highlight_color,))
|
| 931 |
+
yield 1, '<span%s>%s</span>' % (style, value)
|
| 932 |
+
else:
|
| 933 |
+
yield 1, '<span class="hll">%s</span>' % value
|
| 934 |
+
else:
|
| 935 |
+
yield 1, value
|
| 936 |
+
|
| 937 |
+
def wrap(self, source):
|
| 938 |
+
"""
|
| 939 |
+
Wrap the ``source``, which is a generator yielding
|
| 940 |
+
individual lines, in custom generators. See docstring
|
| 941 |
+
for `format`. Can be overridden.
|
| 942 |
+
"""
|
| 943 |
+
|
| 944 |
+
output = source
|
| 945 |
+
if self.wrapcode:
|
| 946 |
+
output = self._wrap_code(output)
|
| 947 |
+
|
| 948 |
+
output = self._wrap_pre(output)
|
| 949 |
+
|
| 950 |
+
return output
|
| 951 |
+
|
| 952 |
+
def format_unencoded(self, tokensource, outfile):
|
| 953 |
+
"""
|
| 954 |
+
The formatting process uses several nested generators; which of
|
| 955 |
+
them are used is determined by the user's options.
|
| 956 |
+
|
| 957 |
+
Each generator should take at least one argument, ``inner``,
|
| 958 |
+
and wrap the pieces of text generated by this.
|
| 959 |
+
|
| 960 |
+
Always yield 2-tuples: (code, text). If "code" is 1, the text
|
| 961 |
+
is part of the original tokensource being highlighted, if it's
|
| 962 |
+
0, the text is some piece of wrapping. This makes it possible to
|
| 963 |
+
use several different wrappers that process the original source
|
| 964 |
+
linewise, e.g. line number generators.
|
| 965 |
+
"""
|
| 966 |
+
source = self._format_lines(tokensource)
|
| 967 |
+
|
| 968 |
+
# As a special case, we wrap line numbers before line highlighting
|
| 969 |
+
# so the line numbers get wrapped in the highlighting tag.
|
| 970 |
+
if not self.nowrap and self.linenos == 2:
|
| 971 |
+
source = self._wrap_inlinelinenos(source)
|
| 972 |
+
|
| 973 |
+
if self.hl_lines:
|
| 974 |
+
source = self._highlight_lines(source)
|
| 975 |
+
|
| 976 |
+
if not self.nowrap:
|
| 977 |
+
if self.lineanchors:
|
| 978 |
+
source = self._wrap_lineanchors(source)
|
| 979 |
+
if self.linespans:
|
| 980 |
+
source = self._wrap_linespans(source)
|
| 981 |
+
source = self.wrap(source)
|
| 982 |
+
if self.linenos == 1:
|
| 983 |
+
source = self._wrap_tablelinenos(source)
|
| 984 |
+
source = self._wrap_div(source)
|
| 985 |
+
if self.full:
|
| 986 |
+
source = self._wrap_full(source, outfile)
|
| 987 |
+
|
| 988 |
+
for t, piece in source:
|
| 989 |
+
outfile.write(piece)
|
.venv/lib/python3.11/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-2023 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()
|