diff --git a/.github/workflows/pylint.yml b/.github/workflows/pylint.yml new file mode 100644 index 0000000..643a58b --- /dev/null +++ b/.github/workflows/pylint.yml @@ -0,0 +1,27 @@ +name: Pylint + +on: + push: + branches: [ "master" ] + pull_request: + branches: [ "master" ] + +jobs: + build: + runs-on: ubuntu-latest + strategy: + matrix: + python-version: ["3.8", "3.9", "3.10"] + steps: + - uses: actions/checkout@v3 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v3 + with: + python-version: ${{ matrix.python-version }} + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install pylint + - name: Analysing the code with pylint + run: | + pylint $(git ls-files '*.py') diff --git a/.github/workflows/python-package.yml b/.github/workflows/python-package.yml new file mode 100644 index 0000000..a5febfc --- /dev/null +++ b/.github/workflows/python-package.yml @@ -0,0 +1,40 @@ +# This workflow will install Python dependencies, run tests and lint with a variety of Python versions +# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python + +name: Python package + +on: + push: + branches: [ "master" ] + pull_request: + branches: [ "master" ] + +jobs: + build: + + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + python-version: ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12"] + + steps: + - uses: actions/checkout@v3 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v3 + with: + python-version: ${{ matrix.python-version }} + - name: Install dependencies + run: | + python -m pip install --upgrade pip + python -m pip install flake8 pytest + if [ -f requirements.txt ]; then pip install -r requirements.txt; fi + - name: Lint with flake8 + run: | + # stop the build if there are Python syntax errors or undefined names + flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics + # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide + flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics + - name: Test with pytest + run: | + pytest --doctest-modules diff --git a/.gitignore b/.gitignore index 19076a1..68bc17f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,160 @@ -__pycache__ -doc -update/PropertyValueAliases.txt -update/ScriptExtensions.txt -update/Scripts.txt -dist -*.egg-info -build -files.txt +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# poetry +# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. +# This is especially recommended for binary packages to ensure reproducibility, and is more +# commonly ignored for libraries. +# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control +#poetry.lock + +# pdm +# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. +#pdm.lock +# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it +# in version control. +# https://pdm.fming.dev/#use-with-ide +.pdm.toml + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ + +# PyCharm +# JetBrains specific template is maintained in a separate JetBrains.gitignore that can +# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore +# and can be added to the global gitignore or merged into this file. For a more nuclear +# option (not recommended) you can uncomment the following to ignore the entire idea folder. +#.idea/ diff --git a/README.md b/README.md index 87e9c88..e66070b 100644 --- a/README.md +++ b/README.md @@ -1,41 +1,90 @@ +[![Pylint](https://github.com/gaspardpetit/uniscripts/actions/workflows/pylint.yml/badge.svg)](https://github.com/gaspardpetit/uniscripts/actions/workflows/pylint.yml) +[![Python package](https://github.com/gaspardpetit/uniscripts/actions/workflows/python-package.yml/badge.svg)](https://github.com/gaspardpetit/uniscripts/actions/workflows/python-package.yml) +[![PyPI version](https://badge.fury.io/py/uniscripts.svg)](https://pypi.python.org/pypi/uniscripts/) +[![Python versions](https://img.shields.io/pypi/pyversions/uniscripts.svg)](https://pypi.org/project/uniscripts/) +[![Unicode versions](https://img.shields.io/badge/Unicode%20-15.1-blue.svg)](https://www.unicode.org/charts/) +[![License: CC0-1.0](https://img.shields.io/badge/License-CC0_1.0-lightgrey.svg)](http://creativecommons.org/publicdomain/zero/1.0/) + +# Uniscripts + Simple Python 3 module to query Unicode UCD script metadata (see UAX #24). This module is useful for querying if a text is made of Latin characters, Arabic, hiragana, kanji (han), and so on. It works for all scripts supported by the Unicode character database. -This module is dumb and slow. If you need speed, you probably want to -implement your own functions. See e.g. `man pcreunicode`, `man pcrepattern` -(`grep -P` supports `\p`). As of this writing, the next-generation of Python -regexpes, available as the pypi library `regex`, also supports `\p`. - Sample usage: - >>> import uniscripts - >>> uniscripts.is_script('A', 'Latin') - True +### Verify is a string is of a given script: + +```python +>>> from uniscripts import is_script, Scripts + +>>> is_script('A', Scripts.LATIN) +True + +# if you pass it a string, all characters must match +>>> is_script('はるはあけぼの', Scripts.HIRAGANA) +True + +>>> is_script('はるはAkebono', Scripts.HIRAGANA) +False + +# ...but by default, it ignores 'Common' characters, such as punctuation. +>>> is_script('はるは:あけぼの', Scripts.HIRAGANA) +True + +>>> is_script('中華人民共和国', Scripts.HAN) # 'Han' = kanji or hànzì +True + +``` +See docstrings for `is_script()`. + + +### Detect the script of a character: + +```python +>>> from uniscripts import which_scripts + +>>> which_scripts('z') +['Latin'] + +>>> which_scripts('は') +['Hiragana'] + +>>> which_scripts('ー') # U+30FC +['Bopomofo', 'Common', 'Han', 'Hangul', 'Hiragana', 'Katakana', 'Yi'] + +``` +See docstrings for `is_script()`. + + +### Detect the script of a text + +```python +>>> from uniscripts import get_scripts +>>> sorted(get_scripts("こんにちは")) +['Hiragana'] + +>>> sorted(get_scripts("チョコレート")) +['Bopomofo', 'Common', 'Han', 'Hangul', 'Hiragana', 'Katakana', 'Yi'] - # if you pass it a string, all characters must match - >>> uniscripts.is_script('はるはあけぼの', 'Hiragana') - True +>>> sorted(get_scripts("ਚਾਕਲੇਟ")) +['Gurmukhi'] - >>> uniscripts.is_script('はるはAkebono', 'Hiragana') - False +>>> sorted(get_scripts("초콜릿")) +['Hangul'] - # ...but by default, it ignores 'Common' characters, such as punctuation. - >>> uniscripts.is_script('はるは:あけぼの', 'Hiragana') - True +>>> sorted(get_scripts("σοκολάτα")) +['Greek'] - >>> uniscripts.is_script('中華人民共和国', 'Han') # 'Han' = kanji or hànzì - True +>>> sorted(get_scripts("شوكولاتة")) +['Arabic'] - >>> uniscripts.which_scripts('z') - ['Latin'] +>>> sorted(get_scripts("chocolat")) +['Common', 'Latin'] - >>> uniscripts.which_scripts('は') - ['Hiragana'] +``` - >>> uniscripts.which_scripts('ー') # U+30FC - ['Common', 'Katakana', 'Hiragana', 'Hangul', 'Han', 'Bopomofo', 'Yi'] +See docstrings for `get_scripts()`. -See docstrings for `is_script()`, `which_scripts()`. diff --git a/setup.py b/setup.py index 16846bb..b35598c 100644 --- a/setup.py +++ b/setup.py @@ -1,30 +1,37 @@ -"""setuptools module for uniscripts. """ - -# Always prefer setuptools over distutils +setuptools module for uniscripts. +""" +from pathlib import Path +import re from setuptools import setup, find_packages -# To use a consistent encoding -from codecs import open -from os import path -here = path.abspath(path.dirname(__file__)) +PACKAGE_NAME = "uniscripts" -# adapted from https://coderwall.com/p/qawuyq/use-markdown-readme-s-in-python-modules -try: - import pypandoc - long_description = pypandoc.convert(path.join(here, 'README.md'), 'rst', format='markdown_github') -except (IOError, ImportError): - with open(path.join(here, 'README.md')) as f: - long_description = f.read() +# Load version from __init__.py +with open(f"{PACKAGE_NAME}/unidata.py", encoding="utf-8") as f: + version = re.search(r'^__unicode_version__\s*=\s*[\'"]([^\'"]*)[\'"]', + f.read(), re.MULTILINE).group(1) -setup( - name='uniscripts', +# Load load description from README.md +this_directory = Path(__file__).parent +long_description = (this_directory / "README.md").read_text() - # PEP440 - version='1.0.5', +# Load requirements (if any) from requirements.txt +requirements = [] +try: + with open('requirements.txt', encoding="utf-8") as f: + requirements = f.read().splitlines() +except FileNotFoundError: + pass - description='query Unicode script metadata', +setup( + name=PACKAGE_NAME, + version=version, + description='Obtain name of Unicode scripts used in text', + packages=find_packages(), long_description=long_description, + long_description_content_type='text/markdown', + install_requires=requirements, url='https://github.com/leoboiko/uniscripts', @@ -40,36 +47,26 @@ # 3 - Alpha # 4 - Beta # 5 - Production/Stable - 'Development Status :: 4 - Beta', + 'Development Status :: 5 - Production/Stable', - 'Intended Audience :: Developers', + "Intended Audience :: Developers", 'Topic :: Software Development :: Internationalization', 'Topic :: Software Development :: Localization', 'Topic :: Text Processing', 'Topic :: Text Processing :: Linguistic', 'License :: CC0 1.0 Universal (CC0 1.0) Public Domain Dedication', + "Operating System :: OS Independent", 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.2', # probably? - 'Programming Language :: Python :: 3.3', # I hope... - 'Programming Language :: Python :: 3.4', # actually tested here + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", ], keywords='unicode script scripts uax24 hiragana katakana kanji han', - - # packages=find_packages(exclude=['contrib', 'docs', 'tests*', 'update']), - packages=['uniscripts'], - - # cf. https://packaging.python.org/en/latest/requirements.html - install_requires=[], - - extras_require={}, - - package_data={}, - - data_files=[], - - entry_points={}, ) diff --git a/tests/test_uniscripts.py b/tests/test_uniscripts.py new file mode 100644 index 0000000..27bf259 --- /dev/null +++ b/tests/test_uniscripts.py @@ -0,0 +1,70 @@ +''' +Unit tests for uniscripts +''' +import sys +import os +import unittest +import doctest + +# Add the parent directory to the sys.path + +sys.path.append(os.path.join(os.path.dirname(__file__), '../')) +# pylint: disable=import-error,wrong-import-position +from uniscripts import is_script, which_scripts, get_scripts, Scripts + +class TestUniscripts(unittest.TestCase): + '''Unit tests for uniscripts''' + + def test_is_script(self): + '''Test is_script method''' + self.assertTrue(is_script('A', Scripts.LATIN)) + self.assertTrue(is_script('Artemísia', Scripts.LATIN)) + self.assertFalse(is_script('ἀψίνθιον ', Scripts.LATIN)) + self.assertTrue(is_script('Let θι = 3', Scripts.LATIN, + ignore=[Scripts.GREEK, + Scripts.COMMON, + Scripts.INHERITED, + Scripts.UNKNOWN])) + self.assertTrue(is_script('はるはあけぼの', Scripts.HIRAGANA)) + self.assertTrue(is_script('はるは:あけぼの.', Scripts.HIRAGANA)) + self.assertFalse(is_script('はるは:あけぼの.', Scripts.HIRAGANA, ignore=[])) + + def test_which_scripts(self): + '''Test which_scripts method''' + self.assertEqual(which_scripts('z'), ['Latin']) + self.assertEqual(which_scripts('.'), ['Common']) + self.assertEqual(which_scripts('は'), ['Hiragana']) + self.assertEqual(sorted(which_scripts('،')), + ['Arabic', 'Common', 'Hanifi_Rohingya', 'Nko', + 'Syriac', 'Thaana', 'Yezidi']) + self.assertEqual(sorted(which_scripts('゙')), ['Hiragana', 'Inherited', 'Katakana']) + self.assertEqual(which_scripts("\ue000"), ['Unknown']) + + def test_get_scripts(self): + '''Test get_scripts method''' + self.assertEqual(sorted(get_scripts("привет")), ['Cyrillic']) + self.assertEqual(sorted(get_scripts("नमस्ते")), ['Devanagari']) + self.assertEqual(sorted(get_scripts("สวัสดี")), ['Thai']) + self.assertEqual(sorted(get_scripts("مرحبا")), ['Arabic']) + self.assertEqual(sorted(get_scripts("გამარჯობა")), ['Georgian']) + self.assertEqual(sorted(get_scripts("नींद")), ['Devanagari']) + self.assertEqual(sorted(get_scripts("Γεια σας")), ['Common', 'Greek']) + self.assertEqual(sorted(get_scripts("こんにちは")), ['Hiragana']) + self.assertEqual(sorted(get_scripts("안녕하세요")), ['Hangul']) + self.assertEqual(sorted(get_scripts("שלום")), ['Hebrew']) + self.assertEqual(sorted(get_scripts("merhaba")), ['Common', 'Latin']) + + def test_get_scripts_extended_range(self): + '''Test get_scripts in the 0x010000 to 0x110000 range''' + self.assertEqual(sorted(get_scripts("𐲌")), ['Old_Hungarian']) + self.assertEqual(sorted(get_scripts("𞄈𞄉𞄊𞄋")), ['Nyiakeng_Puachue_Hmong']) + self.assertEqual(sorted(get_scripts("𑃙ନ𑃚ୱ𑃛ପ")), ['Oriya', 'Sora_Sompeng']) + + + def test_readme(self): + '''Test the python samples found in the README.md file''' + result = doctest.testfile('../README.md', optionflags=doctest.NORMALIZE_WHITESPACE) + self.assertFalse(result.failed, "Doctests failed on README.md") + +if __name__ == '__main__': + unittest.main() diff --git a/uniscripts/__init__.py b/uniscripts/__init__.py index 861517c..6db5bdc 100644 --- a/uniscripts/__init__.py +++ b/uniscripts/__init__.py @@ -1,27 +1,16 @@ -'''Python interface to query Unicode UCD script data (UAX #24). - -Tests whether a character belongs to a script, and so on. This module is quite -dumb and slow. ''' +Python interface to query Unicode UCD script data (UAX #24). -from uniscripts.unidata import RANGES, SCRIPT_ABBREVS - -def in_any_seq(item, seq_seq): - """Returns: true if item is present in any sequence of the sequence of sequences. - - >>> in_any_seq(1, [(2,3,4),(3,2,1)]) - True - >>> in_any_seq(1, [[2,3,4],[3,2,3]]) - False +Tests whether a character belongs to a script, and so on. +''' - """ +from uniscripts.unidata import BUCKETS_000000_010000, BUCKETS_010000_110000 +from uniscripts.unidata import SCRIPT_ABBREVS, Scripts, __unicode_version__ +__version__ = __unicode_version__ - for seq in seq_seq: - if item in seq: - return True - return False -def is_script(string, script, ignore=['Inherited', 'Common', 'Unknown']): +# pylint: disable=dangerous-default-value +def is_script(string:str, script:str, ignore=['Inherited', 'Common', 'Unknown']) -> bool: """Returns: true if all chars in string belong to script. Args: @@ -32,36 +21,36 @@ def is_script(string, script, ignore=['Inherited', 'Common', 'Unknown']): match as 'Latin', and 'あ.' will match as 'Hiragana'. See UAX #24 for details. - >>> is_script('A', 'Latin') + >>> is_script('A', Scripts.LATIN) True - >>> is_script('Artemísia', 'Latin') + >>> is_script('Artemísia', Scripts.LATIN) True - >>> is_script('ἀψίνθιον ', 'Latin') + >>> is_script('ἀψίνθιον ', Scripts.LATIN) False - >>> is_script('Let θι = 3', 'Latin', ignore=['Greek', 'Common', 'Inherited', 'Unknown']) + >>> ignored = [Scripts.GREEK, Scripts.COMMON, Scripts.INHERITED, Scripts.UNKNOWN] + >>> is_script('Let θι = 3', Scripts.LATIN, ignore=ignored) True - >>> is_script('はるはあけぼの', 'Hiragana') + >>> is_script('はるはあけぼの', Scripts.HIRAGANA) True - >>> is_script('はるは:あけぼの.', 'Hiragana') + >>> is_script('はるは:あけぼの.', Scripts.HIRAGANA) True - >>> is_script('はるは:あけぼの.', 'Hiragana', ignore=[]) + >>> is_script('はるは:あけぼの.', Scripts.HIRAGANA, ignore=[]) False """ - if ignore == None: ignore = [] - ignore_ranges = [] - for ignored in ignore: - ignore_ranges += RANGES[ignored] + if ignore is None: + ignore = [] - for char in string: - cp = ord(char) - if ((not in_any_seq(cp, RANGES[script.capitalize()])) - and not in_any_seq(cp, ignore_ranges)): - return False + capitalized_script = script.capitalize() + for char in string: + char_scripts = which_scripts(char) + for char_script in char_scripts: + if char_script not in ignore and char_script not in capitalized_script: + return False return True -def which_scripts(char): +def which_scripts(char:chr) -> [str]: """Returns: list of scripts that char belongs to. >>> which_scripts('z') @@ -70,23 +59,61 @@ def which_scripts(char): ['Common'] >>> which_scripts('は') ['Hiragana'] - >>> sorted(which_scripts('،')) # u+060c - ['Arabic', 'Common', 'Syriac', 'Thaana'] - >>> sorted(which_scripts('゙')) # u+3099 + >>> which_scripts('،') # u+060c + ['Arabic', 'Common', 'Hanifi_Rohingya', 'Nko', 'Syriac', 'Thaana', 'Yezidi'] + >>> which_scripts('゙') # u+3099 ['Hiragana', 'Inherited', 'Katakana'] >>> which_scripts("\ue000") ['Unknown'] """ cp = ord(char) - scripts = [] - for script, ranges in RANGES.items(): - if in_any_seq(cp, ranges): - scripts.append(script) - if scripts: - return(scripts) - else: - return(['Unknown']) + if cp < 0x01_0000: + nb_buckets = len(BUCKETS_000000_010000) + steps = 0x01_0000 // nb_buckets + index = cp // steps + bucket = BUCKETS_000000_010000[index] + elif cp < 0x11_0000: + nb_buckets = len(BUCKETS_010000_110000) + steps = 0x10_0000 // nb_buckets + index = (cp - 0x01_0000) // steps + bucket = BUCKETS_010000_110000[index] + + # binary search within the bucket + low, high = 0, len(bucket) - 1 + while low < high: + mid = (low + high) // 2 + current_entry = bucket[mid][0] + + if cp <= current_entry: + high = mid + else: + low = mid + 1 + + return bucket[low][1] + + +def get_scripts(text:str) -> {}: + """Returns: list of scripts that text belongs to. + + >>> sorted(get_scripts("こんにちは")) + ['Hiragana'] + >>> sorted(get_scripts("チョコレート")) + ['Bopomofo', 'Common', 'Han', 'Hangul', 'Hiragana', 'Katakana', 'Yi'] + >>> sorted(get_scripts("ਚਾਕਲੇਟ")) + ['Gurmukhi'] + >>> sorted(get_scripts("초콜릿")) + ['Hangul'] + >>> sorted(get_scripts("σοκολάτα")) + ['Greek'] + >>> sorted(get_scripts("شوكولاتة")) + ['Arabic'] + >>> sorted(get_scripts("chocolat")) + ['Common', 'Latin'] + + """ + return {elem for x in text for elem in which_scripts(x)} + if __name__ == "__main__": import doctest diff --git a/uniscripts/unidata.py b/uniscripts/unidata.py index e24540d..0006ba7 100644 --- a/uniscripts/unidata.py +++ b/uniscripts/unidata.py @@ -1,2 +1,5144 @@ -RANGES = {'Coptic': [range(994, 1008), range(11392, 11493), range(11493, 11499), range(11499, 11503), range(11503, 11506), range(11506, 11508), range(11513, 11517), range(11517, 11519), range(11518, 11520), range(66272, 66274), range(66273, 66300)], 'New_Tai_Lue': [range(6528, 6572), range(6576, 6593), range(6593, 6600), range(6600, 6602), range(6608, 6618), range(6618, 6620), range(6622, 6624)], 'Rejang': [range(43312, 43335), range(43335, 43346), range(43346, 43348), range(43359, 43361)], 'Phags_Pa': [range(43072, 43124), range(43124, 43128), range(6146, 6148), range(6149, 6151)], 'Khmer': [range(6016, 6068), range(6068, 6070), range(6070, 6072), range(6071, 6078), range(6078, 6086), range(6086, 6088), range(6087, 6089), range(6089, 6100), range(6100, 6103), range(6103, 6105), range(6104, 6107), range(6107, 6109), range(6108, 6110), range(6109, 6111), range(6112, 6122), range(6128, 6138), range(6624, 6656)], 'Thai': [range(3585, 3633), range(3633, 3635), range(3634, 3636), range(3636, 3643), range(3648, 3654), range(3654, 3656), range(3655, 3663), range(3663, 3665), range(3664, 3674), range(3674, 3676)], 'Linear_A': [range(67072, 67383), range(67392, 67414), range(67424, 67432)], 'Vai': [range(42240, 42508), range(42508, 42510), range(42509, 42512), range(42512, 42528), range(42528, 42538), range(42538, 42540)], 'Miao': [range(93952, 94021), range(94032, 94034), range(94033, 94079), range(94095, 94099), range(94099, 94112)], 'Lydian': [range(67872, 67898), range(67903, 67905)], 'Tamil': [range(2946, 2948), range(2947, 2949), range(2949, 2955), range(2958, 2961), range(2962, 2966), range(2969, 2971), range(2972, 2974), range(2974, 2976), range(2979, 2981), range(2984, 2987), range(2990, 3002), range(3006, 3008), range(3008, 3010), range(3009, 3011), range(3014, 3017), range(3018, 3021), range(3021, 3023), range(3024, 3026), range(3031, 3033), range(3046, 3056), range(3056, 3059), range(3059, 3065), range(3065, 3067), range(3066, 3068), range(2404, 2406), range(2405, 2407)], 'Myanmar': [range(4096, 4139), range(4139, 4141), range(4141, 4145), range(4145, 4147), range(4146, 4152), range(4152, 4154), range(4153, 4155), range(4155, 4157), range(4157, 4159), range(4159, 4161), range(4160, 4170), range(4170, 4176), range(4176, 4182), range(4182, 4184), range(4184, 4186), range(4186, 4190), range(4190, 4193), range(4193, 4195), range(4194, 4197), range(4197, 4199), range(4199, 4206), range(4206, 4209), range(4209, 4213), range(4213, 4226), range(4226, 4228), range(4227, 4229), range(4229, 4231), range(4231, 4237), range(4237, 4239), range(4238, 4240), range(4239, 4241), range(4240, 4250), range(4250, 4253), range(4253, 4255), range(4254, 4256), range(43488, 43493), range(43493, 43495), range(43494, 43496), range(43495, 43504), range(43504, 43514), range(43514, 43519), range(43616, 43632), range(43632, 43634), range(43633, 43639), range(43639, 43642), range(43642, 43644), range(43643, 43645), range(43644, 43646), range(43645, 43647), range(43646, 43648), range(4160, 4170), range(43310, 43312)], 'Meetei_Mayek': [range(43744, 43755), range(43755, 43757), range(43756, 43758), range(43758, 43760), range(43760, 43762), range(43762, 43764), range(43763, 43765), range(43765, 43767), range(43766, 43768), range(43968, 44003), range(44003, 44005), range(44005, 44007), range(44006, 44008), range(44008, 44010), range(44009, 44011), range(44011, 44013), range(44012, 44014), range(44013, 44015), range(44016, 44026)], 'Buginese': [range(6656, 6679), range(6679, 6681), range(6681, 6683), range(6683, 6685), range(6686, 6688), range(43471, 43473)], 'Palmyrene': [range(67680, 67703), range(67703, 67705), range(67705, 67712)], 'Glagolitic': [range(11264, 11311), range(11312, 11359)], 'Mro': [range(92736, 92767), range(92768, 92778), range(92782, 92784)], 'Kharoshthi': [range(68096, 68098), range(68097, 68100), range(68101, 68103), range(68108, 68112), range(68112, 68116), range(68117, 68120), range(68121, 68148), range(68152, 68155), range(68159, 68161), range(68160, 68168), range(68176, 68185)], 'Armenian': [range(1329, 1367), range(1369, 1371), range(1370, 1376), range(1377, 1416), range(1418, 1420), range(1421, 1423), range(1423, 1425), range(64275, 64280), range(1417, 1419)], 'Imperial_Aramaic': [range(67648, 67670), range(67671, 67673), range(67672, 67680)], 'Buhid': [range(5952, 5970), range(5970, 5972), range(5941, 5943)], 'Latin': [range(65, 91), range(97, 123), range(170, 172), range(186, 188), range(192, 215), range(216, 247), range(248, 443), range(443, 445), range(444, 448), range(448, 452), range(452, 660), range(660, 662), range(661, 688), range(688, 697), range(736, 741), range(7424, 7462), range(7468, 7517), range(7522, 7526), range(7531, 7544), range(7545, 7579), range(7579, 7615), range(7680, 7936), range(8305, 8307), range(8319, 8321), range(8336, 8349), range(8490, 8492), range(8498, 8500), range(8526, 8528), range(8544, 8579), range(8579, 8581), range(8581, 8585), range(11360, 11388), range(11388, 11390), range(11390, 11392), range(42786, 42864), range(42864, 42866), range(42865, 42888), range(42891, 42895), range(42896, 42926), range(42928, 42930), range(42999, 43001), range(43000, 43002), range(43002, 43004), range(43003, 43008), range(43824, 43867), range(43868, 43872), range(43876, 43878), range(64256, 64263), range(65313, 65339), range(65345, 65371), range(867, 880), range(1157, 1159), range(2385, 2387), range(43310, 43312)], 'Devanagari': [range(2304, 2307), range(2307, 2309), range(2308, 2362), range(2362, 2364), range(2363, 2365), range(2364, 2366), range(2365, 2367), range(2366, 2369), range(2369, 2377), range(2377, 2381), range(2381, 2383), range(2382, 2384), range(2384, 2386), range(2387, 2392), range(2392, 2402), range(2402, 2404), range(2406, 2416), range(2416, 2418), range(2417, 2419), range(2418, 2432), range(43232, 43250), range(43250, 43256), range(43256, 43259), range(43259, 43261), range(7376, 7379), range(7380, 7393), range(7393, 7395), range(7394, 7401), range(7405, 7407), range(7410, 7412), range(7412, 7414), range(7416, 7418), range(2385, 2387), range(2406, 2416), range(43056, 43062), range(43062, 43064), range(43064, 43066), range(43065, 43067), range(2404, 2406), range(2405, 2407)], 'Sundanese': [range(7040, 7042), range(7042, 7044), range(7043, 7073), range(7073, 7075), range(7074, 7078), range(7078, 7080), range(7080, 7082), range(7082, 7084), range(7083, 7086), range(7086, 7088), range(7088, 7098), range(7098, 7104), range(7360, 7368)], 'Hiragana': [range(12353, 12439), range(12445, 12447), range(12447, 12449), range(110593, 110595), range(127488, 127490), range(12337, 12342), range(12441, 12443), range(12443, 12445), range(12448, 12450), range(12540, 12542), range(65392, 65394), range(65438, 65440), range(12294, 12296), range(12348, 12350), range(12349, 12351), range(12688, 12690), range(12690, 12694), range(12694, 12704), range(12291, 12293), range(12307, 12309), range(12316, 12318), range(12317, 12319), range(12318, 12320), range(12336, 12338), range(12343, 12345), range(12350, 12352), range(12736, 12772), range(12832, 12842), range(12842, 12868), range(12928, 12938), range(12938, 12977), range(12992, 13004), range(13144, 13169), range(13179, 13184), range(13280, 13311), range(65093, 65095), range(12289, 12291), range(12296, 12298), range(12297, 12299), range(12298, 12300), range(12299, 12301), range(12300, 12302), range(12301, 12303), range(12302, 12304), range(12303, 12305), range(12304, 12306), range(12305, 12307), range(12308, 12310), range(12309, 12311), range(12310, 12312), range(12311, 12313), range(12312, 12314), range(12313, 12315), range(12314, 12316), range(12315, 12317), range(12539, 12541), range(65377, 65379), range(65378, 65380), range(65379, 65381), range(65380, 65382)], 'Linear_B': [range(65536, 65548), range(65549, 65575), range(65576, 65595), range(65596, 65598), range(65599, 65614), range(65616, 65630), range(65664, 65787), range(65792, 65795), range(65799, 65844), range(65847, 65856)], 'Cypriot': [range(67584, 67590), range(67592, 67594), range(67594, 67638), range(67639, 67641), range(67644, 67646), range(67647, 67649), range(65792, 65795), range(65799, 65844), range(65847, 65856)], 'Duployan': [range(113664, 113771), range(113776, 113789), range(113792, 113801), range(113808, 113818), range(113820, 113822), range(113821, 113823), range(113823, 113825), range(113824, 113828)], 'Khudawadi': [range(70320, 70367), range(70367, 70369), range(70368, 70371), range(70371, 70379), range(70384, 70394), range(43056, 43062), range(43062, 43064), range(43064, 43066), range(43065, 43067), range(2404, 2406), range(2405, 2407)], 'Gujarati': [range(2689, 2691), range(2691, 2693), range(2693, 2702), range(2703, 2706), range(2707, 2729), range(2730, 2737), range(2738, 2740), range(2741, 2746), range(2748, 2750), range(2749, 2751), range(2750, 2753), range(2753, 2758), range(2759, 2761), range(2761, 2763), range(2763, 2765), range(2765, 2767), range(2768, 2770), range(2784, 2786), range(2786, 2788), range(2790, 2800), range(2800, 2802), range(2801, 2803), range(2790, 2800), range(43056, 43062), range(43062, 43064), range(43064, 43066), range(43065, 43067), range(2404, 2406), range(2405, 2407)], 'Hangul': [range(4352, 4608), range(12334, 12336), range(12593, 12687), range(12800, 12831), range(12896, 12927), range(43360, 43389), range(44032, 55204), range(55216, 55239), range(55243, 55292), range(65440, 65471), range(65474, 65480), range(65482, 65488), range(65490, 65496), range(65498, 65501), range(12291, 12293), range(12307, 12309), range(12316, 12318), range(12317, 12319), range(12318, 12320), range(12336, 12338), range(12343, 12345), range(12350, 12352), range(12736, 12772), range(12832, 12842), range(12842, 12868), range(12928, 12938), range(12938, 12977), range(12992, 13004), range(13144, 13169), range(13179, 13184), range(13280, 13311), range(65093, 65095), range(12289, 12291), range(12296, 12298), range(12297, 12299), range(12298, 12300), range(12299, 12301), range(12300, 12302), range(12301, 12303), range(12302, 12304), range(12303, 12305), range(12304, 12306), range(12305, 12307), range(12308, 12310), range(12309, 12311), range(12310, 12312), range(12311, 12313), range(12312, 12314), range(12313, 12315), range(12314, 12316), range(12315, 12317), range(12539, 12541), range(65377, 65379), range(65378, 65380), range(65379, 65381), range(65380, 65382)], 'Tai_Tham': [range(6688, 6741), range(6741, 6743), range(6742, 6744), range(6743, 6745), range(6744, 6751), range(6752, 6754), range(6753, 6755), range(6754, 6756), range(6755, 6757), range(6757, 6765), range(6765, 6771), range(6771, 6781), range(6783, 6785), range(6784, 6794), range(6800, 6810), range(6816, 6823), range(6823, 6825), range(6824, 6830)], 'Gurmukhi': [range(2561, 2563), range(2563, 2565), range(2565, 2571), range(2575, 2577), range(2579, 2601), range(2602, 2609), range(2610, 2612), range(2613, 2615), range(2616, 2618), range(2620, 2622), range(2622, 2625), range(2625, 2627), range(2631, 2633), range(2635, 2638), range(2641, 2643), range(2649, 2653), range(2654, 2656), range(2662, 2672), range(2672, 2674), range(2674, 2677), range(2677, 2679), range(43056, 43062), range(43062, 43064), range(43064, 43066), range(43065, 43067), range(2404, 2406), range(2405, 2407)], 'Psalter_Pahlavi': [range(68480, 68498), range(68505, 68509), range(68521, 68528), range(1600, 1602)], 'Bopomofo': [range(746, 748), range(12549, 12590), range(12704, 12731), range(12330, 12334), range(12291, 12293), range(12307, 12309), range(12316, 12318), range(12317, 12319), range(12318, 12320), range(12336, 12338), range(12343, 12345), range(12350, 12352), range(12736, 12772), range(12832, 12842), range(12842, 12868), range(12928, 12938), range(12938, 12977), range(12992, 13004), range(13144, 13169), range(13179, 13184), range(13280, 13311), range(65093, 65095), range(12289, 12291), range(12296, 12298), range(12297, 12299), range(12298, 12300), range(12299, 12301), range(12300, 12302), range(12301, 12303), range(12302, 12304), range(12303, 12305), range(12304, 12306), range(12305, 12307), range(12308, 12310), range(12309, 12311), range(12310, 12312), range(12311, 12313), range(12312, 12314), range(12313, 12315), range(12314, 12316), range(12315, 12317), range(12539, 12541), range(65377, 65379), range(65378, 65380), range(65379, 65381), range(65380, 65382)], 'Cyrillic': [range(1024, 1154), range(1154, 1156), range(1155, 1157), range(1159, 1161), range(1160, 1162), range(1162, 1328), range(7467, 7469), range(7544, 7546), range(11744, 11776), range(42560, 42606), range(42606, 42608), range(42607, 42609), range(42608, 42611), range(42611, 42613), range(42612, 42622), range(42622, 42624), range(42623, 42625), range(42624, 42652), range(42652, 42654), range(42655, 42657), range(1157, 1159)], 'Nko': [range(1984, 1994), range(1994, 2027), range(2027, 2036), range(2036, 2038), range(2038, 2040), range(2039, 2042), range(2042, 2044)], 'Khojki': [range(70144, 70162), range(70163, 70188), range(70188, 70191), range(70191, 70194), range(70194, 70196), range(70196, 70198), range(70197, 70199), range(70198, 70200), range(70200, 70206), range(2790, 2800)], 'Inscriptional_Parthian': [range(68416, 68438), range(68440, 68448)], 'Katakana': [range(12449, 12539), range(12541, 12543), range(12543, 12545), range(12784, 12800), range(13008, 13055), range(13056, 13144), range(65382, 65392), range(65393, 65438), range(110592, 110594), range(12337, 12342), range(12441, 12443), range(12443, 12445), range(12448, 12450), range(12540, 12542), range(65392, 65394), range(65438, 65440), range(12294, 12296), range(12348, 12350), range(12349, 12351), range(12688, 12690), range(12690, 12694), range(12694, 12704), range(12291, 12293), range(12307, 12309), range(12316, 12318), range(12317, 12319), range(12318, 12320), range(12336, 12338), range(12343, 12345), range(12350, 12352), range(12736, 12772), range(12832, 12842), range(12842, 12868), range(12928, 12938), range(12938, 12977), range(12992, 13004), range(13144, 13169), range(13179, 13184), range(13280, 13311), range(65093, 65095), range(12289, 12291), range(12296, 12298), range(12297, 12299), range(12298, 12300), range(12299, 12301), range(12300, 12302), range(12301, 12303), range(12302, 12304), range(12303, 12305), range(12304, 12306), range(12305, 12307), range(12308, 12310), range(12309, 12311), range(12310, 12312), range(12311, 12313), range(12312, 12314), range(12313, 12315), range(12314, 12316), range(12315, 12317), range(12539, 12541), range(65377, 65379), range(65378, 65380), range(65379, 65381), range(65380, 65382)], 'Bamum': [range(42656, 42726), range(42726, 42736), range(42736, 42738), range(42738, 42744), range(92160, 92729)], 'Telugu': [range(3072, 3074), range(3073, 3076), range(3077, 3085), range(3086, 3089), range(3090, 3113), range(3114, 3130), range(3133, 3135), range(3134, 3137), range(3137, 3141), range(3142, 3145), range(3146, 3150), range(3157, 3159), range(3160, 3162), range(3168, 3170), range(3170, 3172), range(3174, 3184), range(3192, 3199), range(3199, 3201), range(2404, 2406), range(2405, 2407)], 'Cherokee': [range(5024, 5109)], 'Inscriptional_Pahlavi': [range(68448, 68467), range(68472, 68480)], 'Ethiopic': [range(4608, 4681), range(4682, 4686), range(4688, 4695), range(4696, 4698), range(4698, 4702), range(4704, 4745), range(4746, 4750), range(4752, 4785), range(4786, 4790), range(4792, 4799), range(4800, 4802), range(4802, 4806), range(4808, 4823), range(4824, 4881), range(4882, 4886), range(4888, 4955), range(4957, 4960), range(4960, 4969), range(4969, 4989), range(4992, 5008), range(5008, 5018), range(11648, 11671), range(11680, 11687), range(11688, 11695), range(11696, 11703), range(11704, 11711), range(11712, 11719), range(11720, 11727), range(11728, 11735), range(11736, 11743), range(43777, 43783), range(43785, 43791), range(43793, 43799), range(43808, 43815), range(43816, 43823)], 'Syriac': [range(1792, 1806), range(1807, 1809), range(1808, 1810), range(1809, 1811), range(1810, 1840), range(1840, 1867), range(1869, 1872), range(1611, 1622), range(1648, 1650), range(1548, 1550), range(1563, 1565), range(1567, 1569), range(1600, 1602)], 'Georgian': [range(4256, 4294), range(4295, 4297), range(4301, 4303), range(4304, 4347), range(4348, 4350), range(4349, 4352), range(11520, 11558), range(11559, 11561), range(11565, 11567), range(1417, 1419)], 'Canadian_Aboriginal': [range(5120, 5122), range(5121, 5741), range(5741, 5743), range(5743, 5760), range(6320, 6390)], 'Braille': [range(10240, 10496)], 'Ugaritic': [range(66432, 66462), range(66463, 66465)], 'Tagbanwa': [range(5984, 5997), range(5998, 6001), range(6002, 6004), range(5941, 5943)], 'Saurashtra': [range(43136, 43138), range(43138, 43188), range(43188, 43204), range(43204, 43206), range(43214, 43216), range(43216, 43226)], 'Meroitic_Hieroglyphs': [range(67968, 68000)], 'Lisu': [range(42192, 42232), range(42232, 42238), range(42238, 42240)], 'Phoenician': [range(67840, 67862), range(67862, 67868), range(67871, 67873)], 'Sharada': [range(70016, 70018), range(70018, 70020), range(70019, 70067), range(70067, 70070), range(70070, 70079), range(70079, 70081), range(70081, 70085), range(70085, 70089), range(70093, 70095), range(70096, 70106), range(70106, 70108)], 'Osmanya': [range(66688, 66718), range(66720, 66730)], 'Old_Permic': [range(66384, 66422), range(66422, 66427)], 'Samaritan': [range(2048, 2070), range(2070, 2074), range(2074, 2076), range(2075, 2084), range(2084, 2086), range(2085, 2088), range(2088, 2090), range(2089, 2094), range(2096, 2111)], 'Tai_Viet': [range(43648, 43696), range(43696, 43698), range(43697, 43699), range(43698, 43701), range(43701, 43703), range(43703, 43705), range(43705, 43710), range(43710, 43712), range(43712, 43714), range(43713, 43715), range(43714, 43716), range(43739, 43741), range(43741, 43743), range(43742, 43744)], 'Thaana': [range(1920, 1958), range(1958, 1969), range(1969, 1971), range(1632, 1642), range(65010, 65012), range(65021, 65023), range(1548, 1550), range(1563, 1565), range(1567, 1569)], 'Pau_Cin_Hau': [range(72384, 72441)], 'Old_Italic': [range(66304, 66336), range(66336, 66340)], 'Warang_Citi': [range(71840, 71904), range(71904, 71914), range(71914, 71923), range(71935, 71937)], 'Ol_Chiki': [range(7248, 7258), range(7258, 7288), range(7288, 7294), range(7294, 7296)], 'Inherited': [range(768, 880), range(1157, 1159), range(1611, 1622), range(1648, 1650), range(2385, 2387), range(6832, 6846), range(6846, 6848), range(7376, 7379), range(7380, 7393), range(7394, 7401), range(7405, 7407), range(7412, 7414), range(7416, 7418), range(7616, 7670), range(7676, 7680), range(8204, 8206), range(8400, 8413), range(8413, 8417), range(8417, 8419), range(8418, 8421), range(8421, 8433), range(12330, 12334), range(12441, 12443), range(65024, 65040), range(65056, 65070), range(66045, 66047), range(66272, 66274), range(119143, 119146), range(119163, 119171), range(119173, 119180), range(119210, 119214), range(917760, 918000)], 'Sora_Sompeng': [range(69840, 69865), range(69872, 69882)], 'Syloti_Nagri': [range(43008, 43010), range(43010, 43012), range(43011, 43014), range(43014, 43016), range(43015, 43019), range(43019, 43021), range(43020, 43043), range(43043, 43045), range(43045, 43047), range(43047, 43049), range(43048, 43052), range(2534, 2544), range(2404, 2406), range(2405, 2407)], 'Gothic': [range(66352, 66369), range(66369, 66371), range(66370, 66378), range(66378, 66380)], 'Brahmi': [range(69632, 69634), range(69633, 69635), range(69634, 69636), range(69635, 69688), range(69688, 69703), range(69703, 69710), range(69714, 69734), range(69734, 69744), range(69759, 69761)], 'Deseret': [range(66560, 66640)], 'Shavian': [range(66640, 66688)], 'Meroitic_Cursive': [range(68000, 68024), range(68030, 68032)], 'Hanunoo': [range(5920, 5938), range(5938, 5941), range(5941, 5943)], 'Tirhuta': [range(70784, 70832), range(70832, 70835), range(70835, 70841), range(70841, 70843), range(70842, 70844), range(70843, 70847), range(70847, 70849), range(70849, 70851), range(70850, 70852), range(70852, 70854), range(70854, 70856), range(70855, 70857), range(70864, 70874), range(43056, 43062), range(43062, 43064), range(43064, 43066), range(43065, 43067), range(2404, 2406), range(2405, 2407)], 'Tai_Le': [range(6480, 6510), range(6512, 6517), range(4160, 4170)], 'Cham': [range(43520, 43561), range(43561, 43567), range(43567, 43569), range(43569, 43571), range(43571, 43573), range(43573, 43575), range(43584, 43587), range(43587, 43589), range(43588, 43596), range(43596, 43598), range(43597, 43599), range(43600, 43610), range(43612, 43616)], 'Mende_Kikakui': [range(124928, 125125), range(125127, 125136), range(125136, 125143)], 'Grantha': [range(70401, 70403), range(70402, 70404), range(70405, 70413), range(70415, 70417), range(70419, 70441), range(70442, 70449), range(70450, 70452), range(70453, 70458), range(70460, 70462), range(70461, 70463), range(70462, 70464), range(70464, 70466), range(70465, 70469), range(70471, 70473), range(70475, 70478), range(70487, 70489), range(70493, 70498), range(70498, 70500), range(70502, 70509), range(70512, 70517), range(2404, 2406), range(2405, 2407)], 'Pahawh_Hmong': [range(92928, 92976), range(92976, 92983), range(92983, 92988), range(92988, 92992), range(92992, 92996), range(92996, 92998), range(92997, 92999), range(93008, 93018), range(93019, 93026), range(93027, 93048), range(93053, 93072)], 'Siddham': [range(71040, 71087), range(71087, 71090), range(71090, 71094), range(71096, 71100), range(71100, 71102), range(71102, 71104), range(71103, 71105), range(71105, 71114)], 'Tagalog': [range(5888, 5901), range(5902, 5906), range(5906, 5909), range(5941, 5943)], 'Takri': [range(71296, 71339), range(71339, 71341), range(71340, 71342), range(71341, 71343), range(71342, 71344), range(71344, 71350), range(71350, 71352), range(71351, 71353), range(71360, 71370), range(43056, 43062), range(43062, 43064), range(43064, 43066), range(43065, 43067), range(2404, 2406), range(2405, 2407)], 'Yi': [range(40960, 40981), range(40981, 40983), range(40982, 42125), range(42128, 42183), range(12289, 12291), range(12296, 12298), range(12297, 12299), range(12298, 12300), range(12299, 12301), range(12300, 12302), range(12301, 12303), range(12302, 12304), range(12303, 12305), range(12304, 12306), range(12305, 12307), range(12308, 12310), range(12309, 12311), range(12310, 12312), range(12311, 12313), range(12312, 12314), range(12313, 12315), range(12314, 12316), range(12315, 12317), range(12539, 12541), range(65377, 65379), range(65378, 65380), range(65379, 65381), range(65380, 65382)], 'Oriya': [range(2817, 2819), range(2818, 2820), range(2821, 2829), range(2831, 2833), range(2835, 2857), range(2858, 2865), range(2866, 2868), range(2869, 2874), range(2876, 2878), range(2877, 2879), range(2878, 2880), range(2879, 2881), range(2880, 2882), range(2881, 2885), range(2887, 2889), range(2891, 2893), range(2893, 2895), range(2902, 2904), range(2903, 2905), range(2908, 2910), range(2911, 2914), range(2914, 2916), range(2918, 2928), range(2928, 2930), range(2929, 2931), range(2930, 2936), range(2404, 2406), range(2405, 2407)], 'Runic': [range(5792, 5867), range(5870, 5873), range(5873, 5881)], 'Manichaean': [range(68288, 68296), range(68296, 68298), range(68297, 68325), range(68325, 68327), range(68331, 68336), range(68336, 68343), range(1600, 1602)], 'Kannada': [range(3201, 3203), range(3202, 3204), range(3205, 3213), range(3214, 3217), range(3218, 3241), range(3242, 3252), range(3253, 3258), range(3260, 3262), range(3261, 3263), range(3262, 3264), range(3263, 3265), range(3264, 3269), range(3270, 3272), range(3271, 3273), range(3274, 3276), range(3276, 3278), range(3285, 3287), range(3294, 3296), range(3296, 3298), range(3298, 3300), range(3302, 3312), range(3313, 3315), range(2404, 2406), range(2405, 2407)], 'Cuneiform': [range(73728, 74649), range(74752, 74863), range(74864, 74869)], 'Lepcha': [range(7168, 7204), range(7204, 7212), range(7212, 7220), range(7220, 7222), range(7222, 7224), range(7227, 7232), range(7232, 7242), range(7245, 7248)], 'Mongolian': [range(6144, 6146), range(6148, 6150), range(6150, 6152), range(6151, 6155), range(6155, 6158), range(6158, 6160), range(6160, 6170), range(6176, 6211), range(6211, 6213), range(6212, 6264), range(6272, 6313), range(6313, 6315), range(6314, 6316), range(6146, 6148), range(6149, 6151)], 'Lycian': [range(66176, 66205)], 'Avestan': [range(68352, 68406), range(68409, 68416)], 'Mahajani': [range(69968, 70003), range(70003, 70005), range(70004, 70006), range(70006, 70008), range(2406, 2416), range(43056, 43062), range(43062, 43064), range(43064, 43066), range(43065, 43067), range(2404, 2406), range(2405, 2407)], 'Javanese': [range(43392, 43395), range(43395, 43397), range(43396, 43443), range(43443, 43445), range(43444, 43446), range(43446, 43450), range(43450, 43452), range(43452, 43454), range(43453, 43457), range(43457, 43470), range(43472, 43482), range(43486, 43488), range(43471, 43473)], 'Tibetan': [range(3840, 3842), range(3841, 3844), range(3844, 3859), range(3859, 3861), range(3860, 3862), range(3861, 3864), range(3864, 3866), range(3866, 3872), range(3872, 3882), range(3882, 3892), range(3892, 3894), range(3893, 3895), range(3894, 3896), range(3895, 3897), range(3896, 3898), range(3897, 3899), range(3898, 3900), range(3899, 3901), range(3900, 3902), range(3901, 3903), range(3902, 3904), range(3904, 3912), range(3913, 3949), range(3953, 3967), range(3967, 3969), range(3968, 3973), range(3973, 3975), range(3974, 3976), range(3976, 3981), range(3981, 3992), range(3993, 4029), range(4030, 4038), range(4038, 4040), range(4039, 4045), range(4046, 4048), range(4048, 4053), range(4057, 4059)], 'Arabic': [range(1536, 1541), range(1542, 1545), range(1545, 1547), range(1547, 1549), range(1549, 1551), range(1550, 1552), range(1552, 1563), range(1566, 1568), range(1568, 1600), range(1601, 1611), range(1622, 1632), range(1642, 1646), range(1646, 1648), range(1649, 1748), range(1748, 1750), range(1749, 1751), range(1750, 1757), range(1758, 1760), range(1759, 1765), range(1765, 1767), range(1767, 1769), range(1769, 1771), range(1770, 1774), range(1774, 1776), range(1776, 1786), range(1786, 1789), range(1789, 1791), range(1791, 1793), range(1872, 1920), range(2208, 2227), range(2276, 2304), range(64336, 64434), range(64434, 64450), range(64467, 64830), range(64848, 64912), range(64914, 64968), range(65008, 65020), range(65020, 65022), range(65021, 65023), range(65136, 65141), range(65142, 65277), range(69216, 69247), range(126464, 126468), range(126469, 126496), range(126497, 126499), range(126500, 126502), range(126503, 126505), range(126505, 126515), range(126516, 126520), range(126521, 126523), range(126523, 126525), range(126530, 126532), range(126535, 126537), range(126537, 126539), range(126539, 126541), range(126541, 126544), range(126545, 126547), range(126548, 126550), range(126551, 126553), range(126553, 126555), range(126555, 126557), range(126557, 126559), range(126559, 126561), range(126561, 126563), range(126564, 126566), range(126567, 126571), range(126572, 126579), range(126580, 126584), range(126585, 126589), range(126590, 126592), range(126592, 126602), range(126603, 126620), range(126625, 126628), range(126629, 126634), range(126635, 126652), range(126704, 126706), range(66272, 66274), range(66273, 66300), range(1611, 1622), range(1648, 1650), range(1632, 1642), range(65010, 65012), range(65021, 65023), range(1548, 1550), range(1563, 1565), range(1567, 1569), range(1600, 1602)], 'Malayalam': [range(3329, 3331), range(3330, 3332), range(3333, 3341), range(3342, 3345), range(3346, 3387), range(3389, 3391), range(3390, 3393), range(3393, 3397), range(3398, 3401), range(3402, 3405), range(3405, 3407), range(3406, 3408), range(3415, 3417), range(3424, 3426), range(3426, 3428), range(3430, 3440), range(3440, 3446), range(3449, 3451), range(3450, 3456), range(2404, 2406), range(2405, 2407)], 'Kayah_Li': [range(43264, 43274), range(43274, 43302), range(43302, 43310), range(43311, 43313), range(43310, 43312)], 'Bassa_Vah': [range(92880, 92910), range(92912, 92917), range(92917, 92919)], 'Chakma': [range(69888, 69891), range(69891, 69927), range(69927, 69932), range(69932, 69934), range(69933, 69941), range(69942, 69952), range(69952, 69956), range(2534, 2544), range(4160, 4170)], 'Tifinagh': [range(11568, 11624), range(11631, 11633), range(11632, 11634), range(11647, 11649)], 'Ogham': [range(5760, 5762), range(5761, 5787), range(5787, 5789), range(5788, 5790)], 'Nabataean': [range(67712, 67743), range(67751, 67760)], 'Kaithi': [range(69760, 69762), range(69762, 69764), range(69763, 69808), range(69808, 69811), range(69811, 69815), range(69815, 69817), range(69817, 69819), range(69819, 69821), range(69821, 69823), range(69822, 69826), range(2406, 2416), range(43056, 43062), range(43062, 43064), range(43064, 43066), range(43065, 43067)], 'Old_Turkic': [range(68608, 68681)], 'Lao': [range(3713, 3715), range(3716, 3718), range(3719, 3721), range(3722, 3724), range(3725, 3727), range(3732, 3736), range(3737, 3744), range(3745, 3748), range(3749, 3751), range(3751, 3753), range(3754, 3756), range(3757, 3761), range(3761, 3763), range(3762, 3764), range(3764, 3770), range(3771, 3773), range(3773, 3775), range(3776, 3781), range(3782, 3784), range(3784, 3790), range(3792, 3802), range(3804, 3808)], 'Sinhala': [range(3458, 3460), range(3461, 3479), range(3482, 3506), range(3507, 3516), range(3517, 3519), range(3520, 3527), range(3530, 3532), range(3535, 3538), range(3538, 3541), range(3542, 3544), range(3544, 3552), range(3558, 3568), range(3570, 3572), range(3572, 3574), range(70113, 70133), range(2404, 2406), range(2405, 2407)], 'Elbasan': [range(66816, 66856)], 'Han': [range(11904, 11930), range(11931, 12020), range(12032, 12246), range(12293, 12295), range(12295, 12297), range(12321, 12330), range(12344, 12347), range(12347, 12349), range(13312, 19894), range(19968, 40909), range(63744, 64110), range(64112, 64218), range(131072, 173783), range(173824, 177973), range(177984, 178206), range(194560, 195102), range(12330, 12334), range(12294, 12296), range(12348, 12350), range(12349, 12351), range(12688, 12690), range(12690, 12694), range(12694, 12704), range(12291, 12293), range(12307, 12309), range(12316, 12318), range(12317, 12319), range(12318, 12320), range(12336, 12338), range(12343, 12345), range(12350, 12352), range(12736, 12772), range(12832, 12842), range(12842, 12868), range(12928, 12938), range(12938, 12977), range(12992, 13004), range(13144, 13169), range(13179, 13184), range(13280, 13311), range(65093, 65095), range(12289, 12291), range(12296, 12298), range(12297, 12299), range(12298, 12300), range(12299, 12301), range(12300, 12302), range(12301, 12303), range(12302, 12304), range(12303, 12305), range(12304, 12306), range(12305, 12307), range(12308, 12310), range(12309, 12311), range(12310, 12312), range(12311, 12313), range(12312, 12314), range(12313, 12315), range(12314, 12316), range(12315, 12317), range(12539, 12541), range(65377, 65379), range(65378, 65380), range(65379, 65381), range(65380, 65382)], 'Balinese': [range(6912, 6916), range(6916, 6918), range(6917, 6964), range(6964, 6966), range(6965, 6967), range(6966, 6971), range(6971, 6973), range(6972, 6974), range(6973, 6978), range(6978, 6980), range(6979, 6981), range(6981, 6988), range(6992, 7002), range(7002, 7009), range(7009, 7019), range(7019, 7028), range(7028, 7037)], 'Greek': [range(880, 884), range(885, 887), range(886, 888), range(890, 892), range(891, 894), range(895, 897), range(900, 902), range(902, 904), range(904, 907), range(908, 910), range(910, 930), range(931, 994), range(1008, 1014), range(1014, 1016), range(1015, 1024), range(7462, 7467), range(7517, 7522), range(7526, 7531), range(7615, 7617), range(7936, 7958), range(7960, 7966), range(7968, 8006), range(8008, 8014), range(8016, 8024), range(8025, 8027), range(8027, 8029), range(8029, 8031), range(8031, 8062), range(8064, 8117), range(8118, 8125), range(8125, 8127), range(8126, 8128), range(8127, 8130), range(8130, 8133), range(8134, 8141), range(8141, 8144), range(8144, 8148), range(8150, 8156), range(8157, 8160), range(8160, 8173), range(8173, 8176), range(8178, 8181), range(8182, 8189), range(8189, 8191), range(8486, 8488), range(43877, 43879), range(65856, 65909), range(65909, 65913), range(65913, 65930), range(65930, 65932), range(65932, 65934), range(65952, 65954), range(119296, 119362), range(119362, 119365), range(119365, 119367), range(834, 836), range(837, 839), range(7616, 7618)], 'Old_Persian': [range(66464, 66500), range(66504, 66512), range(66512, 66514), range(66513, 66518)], 'Old_South_Arabian': [range(68192, 68221), range(68221, 68223), range(68223, 68225)], 'Mandaic': [range(2112, 2137), range(2137, 2140), range(2142, 2144), range(1600, 1602)], 'Modi': [range(71168, 71216), range(71216, 71219), range(71219, 71227), range(71227, 71229), range(71229, 71231), range(71230, 71232), range(71231, 71233), range(71233, 71236), range(71236, 71238), range(71248, 71258), range(43056, 43062), range(43062, 43064), range(43064, 43066), range(43065, 43067)], 'Unknown': [], 'Limbu': [range(6400, 6431), range(6432, 6435), range(6435, 6439), range(6439, 6441), range(6441, 6444), range(6448, 6450), range(6450, 6452), range(6451, 6457), range(6457, 6460), range(6464, 6466), range(6468, 6470), range(6470, 6480), range(2405, 2407)], 'Egyptian_Hieroglyphs': [range(77824, 78895)], 'Common': [range(0, 32), range(32, 34), range(33, 36), range(36, 38), range(37, 40), range(40, 42), range(41, 43), range(42, 44), range(43, 45), range(44, 46), range(45, 47), range(46, 48), range(48, 58), range(58, 60), range(60, 63), range(63, 65), range(91, 93), range(92, 94), range(93, 95), range(94, 96), range(95, 97), range(96, 98), range(123, 125), range(124, 126), range(125, 127), range(126, 128), range(127, 160), range(160, 162), range(161, 163), range(162, 166), range(166, 168), range(167, 169), range(168, 170), range(169, 171), range(171, 173), range(172, 174), range(173, 175), range(174, 176), range(175, 177), range(176, 178), range(177, 179), range(178, 180), range(180, 182), range(181, 183), range(182, 184), range(184, 186), range(185, 187), range(187, 189), range(188, 191), range(191, 193), range(215, 217), range(247, 249), range(697, 706), range(706, 710), range(710, 722), range(722, 736), range(741, 746), range(748, 750), range(749, 751), range(750, 752), range(751, 768), range(884, 886), range(894, 896), range(901, 903), range(903, 905), range(1417, 1419), range(1541, 1543), range(1548, 1550), range(1563, 1565), range(1564, 1566), range(1567, 1569), range(1600, 1602), range(1632, 1642), range(1757, 1759), range(2404, 2406), range(3647, 3649), range(4053, 4057), range(4347, 4349), range(5867, 5870), range(5941, 5943), range(6146, 6148), range(6149, 6151), range(7379, 7381), range(7393, 7395), range(7401, 7405), range(7406, 7410), range(7410, 7412), range(7413, 7415), range(8192, 8203), range(8203, 8205), range(8206, 8208), range(8208, 8214), range(8214, 8216), range(8216, 8218), range(8217, 8219), range(8218, 8220), range(8219, 8221), range(8221, 8223), range(8222, 8224), range(8223, 8225), range(8224, 8232), range(8232, 8234), range(8233, 8235), range(8234, 8239), range(8239, 8241), range(8240, 8249), range(8249, 8251), range(8250, 8252), range(8251, 8255), range(8255, 8257), range(8257, 8260), range(8260, 8262), range(8261, 8263), range(8262, 8264), range(8263, 8274), range(8274, 8276), range(8275, 8277), range(8276, 8278), range(8277, 8287), range(8287, 8289), range(8288, 8293), range(8294, 8304), range(8304, 8306), range(8308, 8314), range(8314, 8317), range(8317, 8319), range(8318, 8320), range(8320, 8330), range(8330, 8333), range(8333, 8335), range(8334, 8336), range(8352, 8382), range(8448, 8450), range(8450, 8452), range(8451, 8455), range(8455, 8457), range(8456, 8458), range(8458, 8468), range(8468, 8470), range(8469, 8471), range(8470, 8472), range(8472, 8474), range(8473, 8478), range(8478, 8484), range(8484, 8486), range(8485, 8487), range(8487, 8489), range(8488, 8490), range(8489, 8491), range(8492, 8494), range(8494, 8496), range(8495, 8498), range(8499, 8501), range(8501, 8505), range(8505, 8507), range(8506, 8508), range(8508, 8512), range(8512, 8517), range(8517, 8522), range(8522, 8524), range(8523, 8525), range(8524, 8526), range(8527, 8529), range(8528, 8544), range(8585, 8587), range(8592, 8597), range(8597, 8602), range(8602, 8604), range(8604, 8608), range(8608, 8610), range(8609, 8611), range(8611, 8613), range(8612, 8614), range(8614, 8616), range(8615, 8622), range(8622, 8624), range(8623, 8654), range(8654, 8656), range(8656, 8658), range(8658, 8660), range(8659, 8661), range(8660, 8662), range(8661, 8692), range(8692, 8960), range(8960, 8968), range(8968, 8970), range(8969, 8971), range(8970, 8972), range(8971, 8973), range(8972, 8992), range(8992, 8994), range(8994, 9001), range(9001, 9003), range(9002, 9004), range(9003, 9084), range(9084, 9086), range(9085, 9115), range(9115, 9140), range(9140, 9180), range(9180, 9186), range(9186, 9211), range(9216, 9255), range(9280, 9291), range(9312, 9372), range(9372, 9450), range(9450, 9472), range(9472, 9655), range(9655, 9657), range(9656, 9665), range(9665, 9667), range(9666, 9720), range(9720, 9728), range(9728, 9839), range(9839, 9841), range(9840, 10088), range(10088, 10090), range(10089, 10091), range(10090, 10092), range(10091, 10093), range(10092, 10094), range(10093, 10095), range(10094, 10096), range(10095, 10097), range(10096, 10098), range(10097, 10099), range(10098, 10100), range(10099, 10101), range(10100, 10102), range(10101, 10103), range(10102, 10132), range(10132, 10176), range(10176, 10181), range(10181, 10183), range(10182, 10184), range(10183, 10214), range(10214, 10216), range(10215, 10217), range(10216, 10218), range(10217, 10219), range(10218, 10220), range(10219, 10221), range(10220, 10222), range(10221, 10223), range(10222, 10224), range(10223, 10225), range(10224, 10240), range(10496, 10627), range(10627, 10629), range(10628, 10630), range(10629, 10631), range(10630, 10632), range(10631, 10633), range(10632, 10634), range(10633, 10635), range(10634, 10636), range(10635, 10637), range(10636, 10638), range(10637, 10639), range(10638, 10640), range(10639, 10641), range(10640, 10642), range(10641, 10643), range(10642, 10644), range(10643, 10645), range(10644, 10646), range(10645, 10647), range(10646, 10648), range(10647, 10649), range(10648, 10650), range(10649, 10712), range(10712, 10714), range(10713, 10715), range(10714, 10716), range(10715, 10717), range(10716, 10748), range(10748, 10750), range(10749, 10751), range(10750, 11008), range(11008, 11056), range(11056, 11077), range(11077, 11079), range(11079, 11085), range(11085, 11124), range(11126, 11158), range(11160, 11194), range(11197, 11209), range(11210, 11218), range(11776, 11778), range(11778, 11780), range(11779, 11781), range(11780, 11782), range(11781, 11783), range(11782, 11785), range(11785, 11787), range(11786, 11788), range(11787, 11789), range(11788, 11790), range(11789, 11791), range(11790, 11799), range(11799, 11801), range(11800, 11802), range(11802, 11804), range(11803, 11805), range(11804, 11806), range(11805, 11807), range(11806, 11808), range(11808, 11810), range(11809, 11811), range(11810, 11812), range(11811, 11813), range(11812, 11814), range(11813, 11815), range(11814, 11816), range(11815, 11817), range(11816, 11818), range(11817, 11819), range(11818, 11823), range(11823, 11825), range(11824, 11834), range(11834, 11836), range(11836, 11840), range(11840, 11842), range(11841, 11843), range(11842, 11844), range(12272, 12284), range(12288, 12290), range(12289, 12292), range(12292, 12294), range(12294, 12296), range(12296, 12298), range(12297, 12299), range(12298, 12300), range(12299, 12301), range(12300, 12302), range(12301, 12303), range(12302, 12304), range(12303, 12305), range(12304, 12306), range(12305, 12307), range(12306, 12308), range(12308, 12310), range(12309, 12311), range(12310, 12312), range(12311, 12313), range(12312, 12314), range(12313, 12315), range(12314, 12316), range(12315, 12317), range(12316, 12318), range(12317, 12319), range(12318, 12320), range(12320, 12322), range(12336, 12338), range(12337, 12342), range(12342, 12344), range(12348, 12350), range(12349, 12351), range(12350, 12352), range(12443, 12445), range(12448, 12450), range(12539, 12541), range(12540, 12542), range(12688, 12690), range(12690, 12694), range(12694, 12704), range(12736, 12772), range(12832, 12842), range(12842, 12872), range(12872, 12880), range(12880, 12882), range(12881, 12896), range(12927, 12929), range(12928, 12938), range(12938, 12977), range(12977, 12992), range(12992, 13008), range(13144, 13312), range(19904, 19968), range(42752, 42775), range(42775, 42784), range(42784, 42786), range(42888, 42890), range(42889, 42891), range(43056, 43062), range(43062, 43064), range(43064, 43066), range(43065, 43067), range(43310, 43312), range(43471, 43473), range(43867, 43869), range(64830, 64832), range(64831, 64833), range(65040, 65047), range(65047, 65049), range(65048, 65050), range(65049, 65051), range(65072, 65074), range(65073, 65075), range(65075, 65077), range(65077, 65079), range(65078, 65080), range(65079, 65081), range(65080, 65082), range(65081, 65083), range(65082, 65084), range(65083, 65085), range(65084, 65086), range(65085, 65087), range(65086, 65088), range(65087, 65089), range(65088, 65090), range(65089, 65091), range(65090, 65092), range(65091, 65093), range(65092, 65094), range(65093, 65095), range(65095, 65097), range(65096, 65098), range(65097, 65101), range(65101, 65104), range(65104, 65107), range(65108, 65112), range(65112, 65114), range(65113, 65115), range(65114, 65116), range(65115, 65117), range(65116, 65118), range(65117, 65119), range(65118, 65120), range(65119, 65122), range(65122, 65124), range(65123, 65125), range(65124, 65127), range(65128, 65130), range(65129, 65131), range(65130, 65132), range(65279, 65281), range(65281, 65284), range(65284, 65286), range(65285, 65288), range(65288, 65290), range(65289, 65291), range(65290, 65292), range(65291, 65293), range(65292, 65294), range(65293, 65295), range(65294, 65296), range(65296, 65306), range(65306, 65308), range(65308, 65311), range(65311, 65313), range(65339, 65341), range(65340, 65342), range(65341, 65343), range(65342, 65344), range(65343, 65345), range(65344, 65346), range(65371, 65373), range(65372, 65374), range(65373, 65375), range(65374, 65376), range(65375, 65377), range(65376, 65378), range(65377, 65379), range(65378, 65380), range(65379, 65381), range(65380, 65382), range(65392, 65394), range(65438, 65440), range(65504, 65506), range(65506, 65508), range(65507, 65509), range(65508, 65510), range(65509, 65511), range(65512, 65514), range(65513, 65517), range(65517, 65519), range(65529, 65532), range(65532, 65534), range(65792, 65795), range(65799, 65844), range(65847, 65856), range(65936, 65948), range(66000, 66045), range(66273, 66300), range(113824, 113828), range(118784, 119030), range(119040, 119079), range(119081, 119141), range(119141, 119143), range(119146, 119149), range(119149, 119155), range(119155, 119163), range(119171, 119173), range(119180, 119210), range(119214, 119262), range(119552, 119639), range(119648, 119666), range(119808, 119893), range(119894, 119965), range(119966, 119968), range(119970, 119972), range(119973, 119975), range(119977, 119981), range(119982, 119994), range(119995, 119997), range(119997, 120004), range(120005, 120070), range(120071, 120075), range(120077, 120085), range(120086, 120093), range(120094, 120122), range(120123, 120127), range(120128, 120133), range(120134, 120136), range(120138, 120145), range(120146, 120486), range(120488, 120513), range(120513, 120515), range(120514, 120539), range(120539, 120541), range(120540, 120571), range(120571, 120573), range(120572, 120597), range(120597, 120599), range(120598, 120629), range(120629, 120631), range(120630, 120655), range(120655, 120657), range(120656, 120687), range(120687, 120689), range(120688, 120713), range(120713, 120715), range(120714, 120745), range(120745, 120747), range(120746, 120771), range(120771, 120773), range(120772, 120780), range(120782, 120832), range(126976, 127020), range(127024, 127124), range(127136, 127151), range(127153, 127168), range(127169, 127184), range(127185, 127222), range(127232, 127245), range(127248, 127279), range(127280, 127340), range(127344, 127387), range(127462, 127488), range(127489, 127491), range(127504, 127547), range(127552, 127561), range(127568, 127570), range(127744, 127789), range(127792, 127870), range(127872, 127951), range(127956, 127992), range(128000, 128255), range(128256, 128331), range(128336, 128378), range(128379, 128420), range(128421, 128579), range(128581, 128720), range(128736, 128749), range(128752, 128756), range(128768, 128884), range(128896, 128981), range(129024, 129036), range(129040, 129096), range(129104, 129114), range(129120, 129160), range(129168, 129198), range(917505, 917507), range(917536, 917632)], 'Carian': [range(66208, 66257)], 'Bengali': [range(2432, 2434), range(2433, 2435), range(2434, 2436), range(2437, 2445), range(2447, 2449), range(2451, 2473), range(2474, 2481), range(2482, 2484), range(2486, 2490), range(2492, 2494), range(2493, 2495), range(2494, 2497), range(2497, 2501), range(2503, 2505), range(2507, 2509), range(2509, 2511), range(2510, 2512), range(2519, 2521), range(2524, 2526), range(2527, 2530), range(2530, 2532), range(2534, 2544), range(2544, 2546), range(2546, 2548), range(2548, 2554), range(2554, 2556), range(2555, 2557), range(2534, 2544), range(2404, 2406), range(2405, 2407)], 'Caucasian_Albanian': [range(66864, 66916), range(66927, 66929)], 'Old_North_Arabian': [range(68224, 68253), range(68253, 68256)], 'Hebrew': [range(1425, 1470), range(1470, 1472), range(1471, 1473), range(1472, 1474), range(1473, 1475), range(1475, 1477), range(1476, 1478), range(1478, 1480), range(1479, 1481), range(1488, 1515), range(1520, 1523), range(1523, 1525), range(64285, 64287), range(64286, 64288), range(64287, 64297), range(64297, 64299), range(64298, 64311), range(64312, 64317), range(64318, 64320), range(64320, 64322), range(64323, 64325), range(64326, 64336)], 'Batak': [range(7104, 7142), range(7142, 7144), range(7143, 7145), range(7144, 7146), range(7146, 7149), range(7149, 7151), range(7150, 7152), range(7151, 7154), range(7154, 7156), range(7164, 7168)]} -SCRIPT_ABBREVS = {'Yiii': 'Yi', 'Mani': 'Manichaean', 'Geor': 'Georgian', 'Lydi': 'Lydian', 'Ethi': 'Ethiopic', 'Buhd': 'Buhid', 'Hira': 'Hiragana', 'Elba': 'Elbasan', 'Arab': 'Arabic', 'Kthi': 'Kaithi', 'Gujr': 'Gujarati', 'Limb': 'Limbu', 'Beng': 'Bengali', 'Knda': 'Kannada', 'Phlp': 'Psalter_Pahlavi', 'Hebr': 'Hebrew', 'Sind': 'Khudawadi', 'Armi': 'Imperial_Aramaic', 'Hrkt': 'Katakana_Or_Hiragana', 'Sidd': 'Siddham', 'Saur': 'Saurashtra', 'Hang': 'Hangul', 'Lina': 'Linear_A', 'Kali': 'Kayah_Li', 'Prti': 'Inscriptional_Parthian', 'Takr': 'Takri', 'Khmr': 'Khmer', 'Cans': 'Canadian_Aboriginal', 'Phnx': 'Phoenician', 'Sinh': 'Sinhala', 'Mand': 'Mandaic', 'Phag': 'Phags_Pa', 'Linb': 'Linear_B', 'Avst': 'Avestan', 'Samr': 'Samaritan', 'Orkh': 'Old_Turkic', 'Thaa': 'Thaana', 'Bamu': 'Bamum', 'Bugi': 'Buginese', 'Kana': 'Katakana', 'Lyci': 'Lycian', 'Copt': 'Coptic', 'Laoo': 'Lao', 'Mong': 'Mongolian', 'Ugar': 'Ugaritic', 'Goth': 'Gothic', 'Vaii': 'Vai', 'Brah': 'Brahmi', 'Rjng': 'Rejang', 'Xpeo': 'Old_Persian', 'Aghb': 'Caucasian_Albanian', 'Merc': 'Meroitic_Cursive', 'Modi': 'Modi', 'Cprt': 'Cypriot', 'Egyp': 'Egyptian_Hieroglyphs', 'Tibt': 'Tibetan', 'Zzzz': 'Unknown', 'Armn': 'Armenian', 'Sora': 'Sora_Sompeng', 'Mend': 'Mende_Kikakui', 'Perm': 'Old_Permic', 'Plrd': 'Miao', 'Lepc': 'Lepcha', 'Khoj': 'Khojki', 'Mtei': 'Meetei_Mayek', 'Orya': 'Oriya', 'Bopo': 'Bopomofo', 'Hano': 'Hanunoo', 'Osma': 'Osmanya', 'Brai': 'Braille', 'Sarb': 'Old_South_Arabian', 'Cher': 'Cherokee', 'Java': 'Javanese', 'Mymr': 'Myanmar', 'Xsux': 'Cuneiform', 'Pauc': 'Pau_Cin_Hau', 'Bass': 'Bassa_Vah', 'Sylo': 'Syloti_Nagri', 'Zinh': 'Inherited', 'Mlym': 'Malayalam', 'Tavt': 'Tai_Viet', 'Hani': 'Han', 'Glag': 'Glagolitic', 'Cham': 'Cham', 'Nbat': 'Nabataean', 'Tagb': 'Tagbanwa', 'Khar': 'Kharoshthi', 'Ital': 'Old_Italic', 'Tirh': 'Tirhuta', 'Latn': 'Latin', 'Dsrt': 'Deseret', 'Bali': 'Balinese', 'Cari': 'Carian', 'Tfng': 'Tifinagh', 'Cyrl': 'Cyrillic', 'Sund': 'Sundanese', 'Guru': 'Gurmukhi', 'Tglg': 'Tagalog', 'Lisu': 'Lisu', 'Runr': 'Runic', 'Palm': 'Palmyrene', 'Narb': 'Old_North_Arabian', 'Cakm': 'Chakma', 'Dupl': 'Duployan', 'Mahj': 'Mahajani', 'Tale': 'Tai_Le', 'Talu': 'New_Tai_Lue', 'Shaw': 'Shavian', 'Gran': 'Grantha', 'Lana': 'Tai_Tham', 'Deva': 'Devanagari', 'Telu': 'Telugu', 'Mroo': 'Mro', 'Wara': 'Warang_Citi', 'Hmng': 'Pahawh_Hmong', 'Taml': 'Tamil', 'Phli': 'Inscriptional_Pahlavi', 'Olck': 'Ol_Chiki', 'Ogam': 'Ogham', 'Zyyy': 'Common', 'Batk': 'Batak', 'Thai': 'Thai', 'Grek': 'Greek', 'Mero': 'Meroitic_Hieroglyphs', 'Nkoo': 'Nko', 'Syrc': 'Syriac', 'Shrd': 'Sharada'} +'''Unicode lookup data generated from http://ftp.unicode.org/Public/UNIDATA''' + +# pylint: disable=too-many-lines, line-too-long, too-few-public-methods +__unicode_version__ = '15.1.0' + +class Scripts: + '''List of supported script names''' + ADLAM = 'Adlam' + AHOM = 'Ahom' + ANATOLIAN_HIEROGLYPHS = 'Anatolian_Hieroglyphs' + ARABIC = 'Arabic' + ARMENIAN = 'Armenian' + AVESTAN = 'Avestan' + BALINESE = 'Balinese' + BAMUM = 'Bamum' + BASSA_VAH = 'Bassa_Vah' + BATAK = 'Batak' + BENGALI = 'Bengali' + BHAIKSUKI = 'Bhaiksuki' + BOPOMOFO = 'Bopomofo' + BRAHMI = 'Brahmi' + BRAILLE = 'Braille' + BUGINESE = 'Buginese' + BUHID = 'Buhid' + CANADIAN_ABORIGINAL = 'Canadian_Aboriginal' + CARIAN = 'Carian' + CAUCASIAN_ALBANIAN = 'Caucasian_Albanian' + CHAKMA = 'Chakma' + CHAM = 'Cham' + CHEROKEE = 'Cherokee' + CHORASMIAN = 'Chorasmian' + COMMON = 'Common' + COPTIC = 'Coptic' + CUNEIFORM = 'Cuneiform' + CYPRIOT = 'Cypriot' + CYPRO_MINOAN = 'Cypro_Minoan' + CYRILLIC = 'Cyrillic' + DESERET = 'Deseret' + DEVANAGARI = 'Devanagari' + DIVES_AKURU = 'Dives_Akuru' + DOGRA = 'Dogra' + DUPLOYAN = 'Duployan' + EGYPTIAN_HIEROGLYPHS = 'Egyptian_Hieroglyphs' + ELBASAN = 'Elbasan' + ELYMAIC = 'Elymaic' + ETHIOPIC = 'Ethiopic' + GEORGIAN = 'Georgian' + GLAGOLITIC = 'Glagolitic' + GOTHIC = 'Gothic' + GRANTHA = 'Grantha' + GREEK = 'Greek' + GUJARATI = 'Gujarati' + GUNJALA_GONDI = 'Gunjala_Gondi' + GURMUKHI = 'Gurmukhi' + HAN = 'Han' + HANGUL = 'Hangul' + HANIFI_ROHINGYA = 'Hanifi_Rohingya' + HANUNOO = 'Hanunoo' + HATRAN = 'Hatran' + HEBREW = 'Hebrew' + HIRAGANA = 'Hiragana' + IMPERIAL_ARAMAIC = 'Imperial_Aramaic' + INHERITED = 'Inherited' + INSCRIPTIONAL_PAHLAVI = 'Inscriptional_Pahlavi' + INSCRIPTIONAL_PARTHIAN = 'Inscriptional_Parthian' + JAVANESE = 'Javanese' + KAITHI = 'Kaithi' + KANNADA = 'Kannada' + KATAKANA = 'Katakana' + KATAKANA_OR_HIRAGANA = 'Katakana_Or_Hiragana' + KAWI = 'Kawi' + KAYAH_LI = 'Kayah_Li' + KHAROSHTHI = 'Kharoshthi' + KHITAN_SMALL_SCRIPT = 'Khitan_Small_Script' + KHMER = 'Khmer' + KHOJKI = 'Khojki' + KHUDAWADI = 'Khudawadi' + LAO = 'Lao' + LATIN = 'Latin' + LEPCHA = 'Lepcha' + LIMBU = 'Limbu' + LINEAR_A = 'Linear_A' + LINEAR_B = 'Linear_B' + LISU = 'Lisu' + LYCIAN = 'Lycian' + LYDIAN = 'Lydian' + MAHAJANI = 'Mahajani' + MAKASAR = 'Makasar' + MALAYALAM = 'Malayalam' + MANDAIC = 'Mandaic' + MANICHAEAN = 'Manichaean' + MARCHEN = 'Marchen' + MASARAM_GONDI = 'Masaram_Gondi' + MEDEFAIDRIN = 'Medefaidrin' + MEETEI_MAYEK = 'Meetei_Mayek' + MENDE_KIKAKUI = 'Mende_Kikakui' + MEROITIC_CURSIVE = 'Meroitic_Cursive' + MEROITIC_HIEROGLYPHS = 'Meroitic_Hieroglyphs' + MIAO = 'Miao' + MODI = 'Modi' + MONGOLIAN = 'Mongolian' + MRO = 'Mro' + MULTANI = 'Multani' + MYANMAR = 'Myanmar' + NABATAEAN = 'Nabataean' + NAG_MUNDARI = 'Nag_Mundari' + NANDINAGARI = 'Nandinagari' + NEW_TAI_LUE = 'New_Tai_Lue' + NEWA = 'Newa' + NKO = 'Nko' + NUSHU = 'Nushu' + NYIAKENG_PUACHUE_HMONG = 'Nyiakeng_Puachue_Hmong' + OGHAM = 'Ogham' + OL_CHIKI = 'Ol_Chiki' + OLD_HUNGARIAN = 'Old_Hungarian' + OLD_ITALIC = 'Old_Italic' + OLD_NORTH_ARABIAN = 'Old_North_Arabian' + OLD_PERMIC = 'Old_Permic' + OLD_PERSIAN = 'Old_Persian' + OLD_SOGDIAN = 'Old_Sogdian' + OLD_SOUTH_ARABIAN = 'Old_South_Arabian' + OLD_TURKIC = 'Old_Turkic' + OLD_UYGHUR = 'Old_Uyghur' + ORIYA = 'Oriya' + OSAGE = 'Osage' + OSMANYA = 'Osmanya' + PAHAWH_HMONG = 'Pahawh_Hmong' + PALMYRENE = 'Palmyrene' + PAU_CIN_HAU = 'Pau_Cin_Hau' + PHAGS_PA = 'Phags_Pa' + PHOENICIAN = 'Phoenician' + PSALTER_PAHLAVI = 'Psalter_Pahlavi' + REJANG = 'Rejang' + RUNIC = 'Runic' + SAMARITAN = 'Samaritan' + SAURASHTRA = 'Saurashtra' + SHARADA = 'Sharada' + SHAVIAN = 'Shavian' + SIDDHAM = 'Siddham' + SIGNWRITING = 'SignWriting' + SINHALA = 'Sinhala' + SOGDIAN = 'Sogdian' + SORA_SOMPENG = 'Sora_Sompeng' + SOYOMBO = 'Soyombo' + SUNDANESE = 'Sundanese' + SYLOTI_NAGRI = 'Syloti_Nagri' + SYRIAC = 'Syriac' + TAGALOG = 'Tagalog' + TAGBANWA = 'Tagbanwa' + TAI_LE = 'Tai_Le' + TAI_THAM = 'Tai_Tham' + TAI_VIET = 'Tai_Viet' + TAKRI = 'Takri' + TAMIL = 'Tamil' + TANGSA = 'Tangsa' + TANGUT = 'Tangut' + TELUGU = 'Telugu' + THAANA = 'Thaana' + THAI = 'Thai' + TIBETAN = 'Tibetan' + TIFINAGH = 'Tifinagh' + TIRHUTA = 'Tirhuta' + TOTO = 'Toto' + UGARITIC = 'Ugaritic' + UNKNOWN = 'Unknown' + VAI = 'Vai' + VITHKUQI = 'Vithkuqi' + WANCHO = 'Wancho' + WARANG_CITI = 'Warang_Citi' + YEZIDI = 'Yezidi' + YI = 'Yi' + ZANABAZAR_SQUARE = 'Zanabazar_Square' + +SCRIPT_ABBREVS = { + 'Adlm': 'Adlam', + 'Aghb': 'Caucasian_Albanian', + 'Ahom': 'Ahom', + 'Arab': 'Arabic', + 'Armi': 'Imperial_Aramaic', + 'Armn': 'Armenian', + 'Avst': 'Avestan', + 'Bali': 'Balinese', + 'Bamu': 'Bamum', + 'Bass': 'Bassa_Vah', + 'Batk': 'Batak', + 'Beng': 'Bengali', + 'Bhks': 'Bhaiksuki', + 'Bopo': 'Bopomofo', + 'Brah': 'Brahmi', + 'Brai': 'Braille', + 'Bugi': 'Buginese', + 'Buhd': 'Buhid', + 'Cakm': 'Chakma', + 'Cans': 'Canadian_Aboriginal', + 'Cari': 'Carian', + 'Cham': 'Cham', + 'Cher': 'Cherokee', + 'Chrs': 'Chorasmian', + 'Copt': 'Coptic', + 'Cpmn': 'Cypro_Minoan', + 'Cprt': 'Cypriot', + 'Cyrl': 'Cyrillic', + 'Deva': 'Devanagari', + 'Diak': 'Dives_Akuru', + 'Dogr': 'Dogra', + 'Dsrt': 'Deseret', + 'Dupl': 'Duployan', + 'Egyp': 'Egyptian_Hieroglyphs', + 'Elba': 'Elbasan', + 'Elym': 'Elymaic', + 'Ethi': 'Ethiopic', + 'Geor': 'Georgian', + 'Glag': 'Glagolitic', + 'Gong': 'Gunjala_Gondi', + 'Gonm': 'Masaram_Gondi', + 'Goth': 'Gothic', + 'Gran': 'Grantha', + 'Grek': 'Greek', + 'Gujr': 'Gujarati', + 'Guru': 'Gurmukhi', + 'Hang': 'Hangul', + 'Hani': 'Han', + 'Hano': 'Hanunoo', + 'Hatr': 'Hatran', + 'Hebr': 'Hebrew', + 'Hira': 'Hiragana', + 'Hluw': 'Anatolian_Hieroglyphs', + 'Hmng': 'Pahawh_Hmong', + 'Hmnp': 'Nyiakeng_Puachue_Hmong', + 'Hrkt': 'Katakana_Or_Hiragana', + 'Hung': 'Old_Hungarian', + 'Ital': 'Old_Italic', + 'Java': 'Javanese', + 'Kali': 'Kayah_Li', + 'Kana': 'Katakana', + 'Kawi': 'Kawi', + 'Khar': 'Kharoshthi', + 'Khmr': 'Khmer', + 'Khoj': 'Khojki', + 'Kits': 'Khitan_Small_Script', + 'Knda': 'Kannada', + 'Kthi': 'Kaithi', + 'Lana': 'Tai_Tham', + 'Laoo': 'Lao', + 'Latn': 'Latin', + 'Lepc': 'Lepcha', + 'Limb': 'Limbu', + 'Lina': 'Linear_A', + 'Linb': 'Linear_B', + 'Lisu': 'Lisu', + 'Lyci': 'Lycian', + 'Lydi': 'Lydian', + 'Mahj': 'Mahajani', + 'Maka': 'Makasar', + 'Mand': 'Mandaic', + 'Mani': 'Manichaean', + 'Marc': 'Marchen', + 'Medf': 'Medefaidrin', + 'Mend': 'Mende_Kikakui', + 'Merc': 'Meroitic_Cursive', + 'Mero': 'Meroitic_Hieroglyphs', + 'Mlym': 'Malayalam', + 'Modi': 'Modi', + 'Mong': 'Mongolian', + 'Mroo': 'Mro', + 'Mtei': 'Meetei_Mayek', + 'Mult': 'Multani', + 'Mymr': 'Myanmar', + 'Nagm': 'Nag_Mundari', + 'Nand': 'Nandinagari', + 'Narb': 'Old_North_Arabian', + 'Nbat': 'Nabataean', + 'Newa': 'Newa', + 'Nkoo': 'Nko', + 'Nshu': 'Nushu', + 'Ogam': 'Ogham', + 'Olck': 'Ol_Chiki', + 'Orkh': 'Old_Turkic', + 'Orya': 'Oriya', + 'Osge': 'Osage', + 'Osma': 'Osmanya', + 'Ougr': 'Old_Uyghur', + 'Palm': 'Palmyrene', + 'Pauc': 'Pau_Cin_Hau', + 'Perm': 'Old_Permic', + 'Phag': 'Phags_Pa', + 'Phli': 'Inscriptional_Pahlavi', + 'Phlp': 'Psalter_Pahlavi', + 'Phnx': 'Phoenician', + 'Plrd': 'Miao', + 'Prti': 'Inscriptional_Parthian', + 'Rjng': 'Rejang', + 'Rohg': 'Hanifi_Rohingya', + 'Runr': 'Runic', + 'Samr': 'Samaritan', + 'Sarb': 'Old_South_Arabian', + 'Saur': 'Saurashtra', + 'Sgnw': 'SignWriting', + 'Shaw': 'Shavian', + 'Shrd': 'Sharada', + 'Sidd': 'Siddham', + 'Sind': 'Khudawadi', + 'Sinh': 'Sinhala', + 'Sogd': 'Sogdian', + 'Sogo': 'Old_Sogdian', + 'Sora': 'Sora_Sompeng', + 'Soyo': 'Soyombo', + 'Sund': 'Sundanese', + 'Sylo': 'Syloti_Nagri', + 'Syrc': 'Syriac', + 'Tagb': 'Tagbanwa', + 'Takr': 'Takri', + 'Tale': 'Tai_Le', + 'Talu': 'New_Tai_Lue', + 'Taml': 'Tamil', + 'Tang': 'Tangut', + 'Tavt': 'Tai_Viet', + 'Telu': 'Telugu', + 'Tfng': 'Tifinagh', + 'Tglg': 'Tagalog', + 'Thaa': 'Thaana', + 'Thai': 'Thai', + 'Tibt': 'Tibetan', + 'Tirh': 'Tirhuta', + 'Tnsa': 'Tangsa', + 'Toto': 'Toto', + 'Ugar': 'Ugaritic', + 'Vaii': 'Vai', + 'Vith': 'Vithkuqi', + 'Wara': 'Warang_Citi', + 'Wcho': 'Wancho', + 'Xpeo': 'Old_Persian', + 'Xsux': 'Cuneiform', + 'Yezi': 'Yezidi', + 'Yiii': 'Yi', + 'Zanb': 'Zanabazar_Square', + 'Zinh': 'Inherited', + 'Zyyy': 'Common', + 'Zzzz': 'Unknown', +} + +BUCKETS_000000_010000 = [ + [ # 0x0 -> 0x3f + [ 0x3f, ['Common']], + ], + [ # 0x40 -> 0x7f + [ 0x40, ['Common']], + [ 0x5a, ['Latin']], + [ 0x60, ['Common']], + [ 0x61, ['Common', 'Latin']], + [ 0x7a, ['Latin']], + [ 0x7f, ['Common']], + ], + [ # 0x80 -> 0xbf + [ 0xa9, ['Common']], + [ 0xab, ['Common', 'Latin']], + [ 0xb9, ['Common']], + [ 0xbb, ['Common', 'Latin']], + [ 0xbf, ['Common']], + ], + [ # 0xc0 -> 0xff + [ 0xc0, ['Common', 'Latin']], + [ 0xd6, ['Latin']], + [ 0xd7, ['Common']], + [ 0xd8, ['Common', 'Latin']], + [ 0xf6, ['Latin']], + [ 0xf7, ['Common']], + [ 0xf8, ['Common', 'Latin']], + [ 0xff, ['Latin']], + ], + [ # 0x100 -> 0x13f + [ 0x13f, ['Latin']], + ], + [ # 0x140 -> 0x17f + [ 0x17f, ['Latin']], + ], + [ # 0x180 -> 0x1bf + [ 0x1bf, ['Latin']], + ], + [ # 0x1c0 -> 0x1ff + [ 0x1ff, ['Latin']], + ], + [ # 0x200 -> 0x23f + [ 0x23f, ['Latin']], + ], + [ # 0x240 -> 0x27f + [ 0x27f, ['Latin']], + ], + [ # 0x280 -> 0x2bf + [ 0x2b8, ['Latin']], + [ 0x2bf, ['Common']], + ], + [ # 0x2c0 -> 0x2ff + [ 0x2df, ['Common']], + [ 0x2e4, ['Latin']], + [ 0x2e9, ['Common']], + [ 0x2eb, ['Bopomofo']], + [ 0x2ff, ['Common']], + ], + [ # 0x300 -> 0x33f + [ 0x33f, ['Inherited']], + ], + [ # 0x340 -> 0x37f + [ 0x341, ['Inherited']], + [ 0x343, ['Greek', 'Inherited']], + [ 0x344, ['Inherited']], + [ 0x346, ['Greek', 'Inherited']], + [ 0x362, ['Inherited']], + [ 0x36f, ['Inherited', 'Latin']], + [ 0x373, ['Greek']], + [ 0x374, ['Common']], + [ 0x375, ['Common', 'Greek']], + [ 0x377, ['Greek']], + [ 0x379, ['Unknown']], + [ 0x37d, ['Greek']], + [ 0x37e, ['Common']], + [ 0x37f, ['Common', 'Greek']], + ], + [ # 0x380 -> 0x3bf + [ 0x380, ['Greek']], + [ 0x383, ['Unknown']], + [ 0x384, ['Greek']], + [ 0x388, ['Common', 'Greek']], + [ 0x38a, ['Greek']], + [ 0x38b, ['Unknown']], + [ 0x3a1, ['Greek']], + [ 0x3a2, ['Unknown']], + [ 0x3bf, ['Greek']], + ], + [ # 0x3c0 -> 0x3ff + [ 0x3e1, ['Greek']], + [ 0x3ef, ['Coptic']], + [ 0x3ff, ['Greek']], + ], + [ # 0x400 -> 0x43f + [ 0x43f, ['Cyrillic']], + ], + [ # 0x440 -> 0x47f + [ 0x47f, ['Cyrillic']], + ], + [ # 0x480 -> 0x4bf + [ 0x482, ['Cyrillic']], + [ 0x483, ['Cyrillic', 'Old_Permic']], + [ 0x484, ['Cyrillic', 'Glagolitic', 'Old_Permic']], + [ 0x485, ['Cyrillic', 'Glagolitic', 'Inherited', 'Latin']], + [ 0x486, ['Cyrillic', 'Inherited', 'Latin']], + [ 0x488, ['Cyrillic', 'Glagolitic']], + [ 0x4bf, ['Cyrillic']], + ], + [ # 0x4c0 -> 0x4ff + [ 0x4ff, ['Cyrillic']], + ], + [ # 0x500 -> 0x53f + [ 0x52f, ['Cyrillic']], + [ 0x530, ['Unknown']], + [ 0x53f, ['Armenian']], + ], + [ # 0x540 -> 0x57f + [ 0x556, ['Armenian']], + [ 0x558, ['Unknown']], + [ 0x57f, ['Armenian']], + ], + [ # 0x580 -> 0x5bf + [ 0x58b, ['Armenian']], + [ 0x58c, ['Unknown']], + [ 0x590, ['Armenian']], + [ 0x5bf, ['Hebrew']], + ], + [ # 0x5c0 -> 0x5ff + [ 0x5c8, ['Hebrew']], + [ 0x5cf, ['Unknown']], + [ 0x5ea, ['Hebrew']], + [ 0x5ee, ['Unknown']], + [ 0x5f4, ['Hebrew']], + [ 0x5ff, ['Unknown']], + ], + [ # 0x600 -> 0x63f + [ 0x604, ['Arabic']], + [ 0x605, ['Common']], + [ 0x606, ['Arabic', 'Common']], + [ 0x60b, ['Arabic']], + [ 0x60d, ['Arabic', 'Common', 'Hanifi_Rohingya', 'Nko', 'Syriac', 'Thaana', 'Yezidi']], + [ 0x61a, ['Arabic']], + [ 0x61c, ['Arabic', 'Common', 'Hanifi_Rohingya', 'Nko', 'Syriac', 'Thaana', 'Yezidi']], + [ 0x61d, ['Arabic', 'Syriac', 'Thaana']], + [ 0x61e, ['Arabic']], + [ 0x620, ['Adlam', 'Arabic', 'Common', 'Hanifi_Rohingya', 'Nko', 'Syriac', 'Thaana', 'Yezidi']], + [ 0x63f, ['Arabic']], + ], + [ # 0x640 -> 0x67f + [ 0x641, ['Adlam', 'Arabic', 'Common', 'Hanifi_Rohingya', 'Mandaic', 'Manichaean', 'Old_Uyghur', 'Psalter_Pahlavi', 'Sogdian', 'Syriac']], + [ 0x64a, ['Arabic']], + [ 0x655, ['Arabic', 'Inherited', 'Syriac']], + [ 0x65f, ['Arabic']], + [ 0x669, ['Arabic', 'Thaana', 'Yezidi']], + [ 0x66f, ['Arabic']], + [ 0x671, ['Arabic', 'Inherited', 'Syriac']], + [ 0x67f, ['Arabic']], + ], + [ # 0x680 -> 0x6bf + [ 0x6bf, ['Arabic']], + ], + [ # 0x6c0 -> 0x6ff + [ 0x6d3, ['Arabic']], + [ 0x6d5, ['Arabic', 'Hanifi_Rohingya']], + [ 0x6dc, ['Arabic']], + [ 0x6dd, ['Common']], + [ 0x6de, ['Arabic', 'Common']], + [ 0x6ff, ['Arabic']], + ], + [ # 0x700 -> 0x73f + [ 0x700, ['Arabic', 'Syriac']], + [ 0x70d, ['Syriac']], + [ 0x70e, ['Unknown']], + [ 0x73f, ['Syriac']], + ], + [ # 0x740 -> 0x77f + [ 0x74a, ['Syriac']], + [ 0x74c, ['Unknown']], + [ 0x74f, ['Syriac']], + [ 0x77f, ['Arabic']], + ], + [ # 0x780 -> 0x7bf + [ 0x7b2, ['Thaana']], + [ 0x7bf, ['Unknown']], + ], + [ # 0x7c0 -> 0x7ff + [ 0x7fb, ['Nko']], + [ 0x7fc, ['Unknown']], + [ 0x7ff, ['Nko']], + ], + [ # 0x800 -> 0x83f + [ 0x82d, ['Samaritan']], + [ 0x82f, ['Unknown']], + [ 0x83e, ['Samaritan']], + [ 0x83f, ['Unknown']], + ], + [ # 0x840 -> 0x87f + [ 0x85b, ['Mandaic']], + [ 0x85d, ['Unknown']], + [ 0x85f, ['Mandaic']], + [ 0x86a, ['Syriac']], + [ 0x86f, ['Unknown']], + [ 0x87f, ['Arabic']], + ], + [ # 0x880 -> 0x8bf + [ 0x88e, ['Arabic']], + [ 0x88f, ['Unknown']], + [ 0x891, ['Arabic']], + [ 0x897, ['Unknown']], + [ 0x8bf, ['Arabic']], + ], + [ # 0x8c0 -> 0x8ff + [ 0x8e1, ['Arabic']], + [ 0x8e2, ['Common']], + [ 0x8e3, ['Arabic', 'Common']], + [ 0x8ff, ['Arabic']], + ], + [ # 0x900 -> 0x93f + [ 0x93f, ['Devanagari']], + ], + [ # 0x940 -> 0x97f + [ 0x950, ['Devanagari']], + [ 0x952, ['Bengali', 'Devanagari', 'Grantha', 'Gujarati', 'Gurmukhi', 'Inherited', 'Kannada', 'Latin', 'Malayalam', 'Oriya', 'Sharada', 'Tamil', 'Telugu', 'Tirhuta']], + [ 0x953, ['Bengali', 'Devanagari', 'Grantha', 'Gujarati', 'Gurmukhi', 'Inherited', 'Kannada', 'Latin', 'Malayalam', 'Oriya', 'Tamil', 'Telugu', 'Tirhuta']], + [ 0x954, ['Inherited']], + [ 0x963, ['Devanagari']], + [ 0x964, ['Bengali', 'Common', 'Devanagari', 'Dogra', 'Grantha', 'Gujarati', 'Gunjala_Gondi', 'Gurmukhi', 'Kannada', 'Khudawadi', 'Mahajani', 'Malayalam', 'Masaram_Gondi', 'Nandinagari', 'Oriya', 'Sinhala', 'Syloti_Nagri', 'Takri', 'Tamil', 'Telugu', 'Tirhuta']], + [ 0x965, ['Bengali', 'Common', 'Devanagari', 'Dogra', 'Grantha', 'Gujarati', 'Gunjala_Gondi', 'Gurmukhi', 'Kannada', 'Khudawadi', 'Limbu', 'Mahajani', 'Malayalam', 'Masaram_Gondi', 'Nandinagari', 'Oriya', 'Sinhala', 'Syloti_Nagri', 'Takri', 'Tamil', 'Telugu', 'Tirhuta']], + [ 0x966, ['Bengali', 'Devanagari', 'Dogra', 'Grantha', 'Gujarati', 'Gunjala_Gondi', 'Gurmukhi', 'Kaithi', 'Kannada', 'Khudawadi', 'Limbu', 'Mahajani', 'Malayalam', 'Masaram_Gondi', 'Nandinagari', 'Oriya', 'Sinhala', 'Syloti_Nagri', 'Takri', 'Tamil', 'Telugu', 'Tirhuta']], + [ 0x96f, ['Devanagari', 'Dogra', 'Kaithi', 'Mahajani']], + [ 0x97f, ['Devanagari']], + ], + [ # 0x980 -> 0x9bf + [ 0x983, ['Bengali']], + [ 0x984, ['Unknown']], + [ 0x98c, ['Bengali']], + [ 0x98e, ['Unknown']], + [ 0x990, ['Bengali']], + [ 0x992, ['Unknown']], + [ 0x9a8, ['Bengali']], + [ 0x9a9, ['Unknown']], + [ 0x9b0, ['Bengali']], + [ 0x9b1, ['Unknown']], + [ 0x9b3, ['Bengali']], + [ 0x9b5, ['Unknown']], + [ 0x9b9, ['Bengali']], + [ 0x9bb, ['Unknown']], + [ 0x9bf, ['Bengali']], + ], + [ # 0x9c0 -> 0x9ff + [ 0x9c4, ['Bengali']], + [ 0x9c6, ['Unknown']], + [ 0x9c8, ['Bengali']], + [ 0x9ca, ['Unknown']], + [ 0x9cf, ['Bengali']], + [ 0x9d6, ['Unknown']], + [ 0x9d8, ['Bengali']], + [ 0x9db, ['Unknown']], + [ 0x9dd, ['Bengali']], + [ 0x9de, ['Unknown']], + [ 0x9e3, ['Bengali']], + [ 0x9e5, ['Unknown']], + [ 0x9ef, ['Bengali', 'Chakma', 'Syloti_Nagri']], + [ 0x9ff, ['Bengali']], + ], + [ # 0xa00 -> 0xa3f + [ 0xa00, ['Unknown']], + [ 0xa0a, ['Gurmukhi']], + [ 0xa0e, ['Unknown']], + [ 0xa10, ['Gurmukhi']], + [ 0xa12, ['Unknown']], + [ 0xa28, ['Gurmukhi']], + [ 0xa29, ['Unknown']], + [ 0xa30, ['Gurmukhi']], + [ 0xa31, ['Unknown']], + [ 0xa33, ['Gurmukhi']], + [ 0xa34, ['Unknown']], + [ 0xa36, ['Gurmukhi']], + [ 0xa37, ['Unknown']], + [ 0xa39, ['Gurmukhi']], + [ 0xa3b, ['Unknown']], + [ 0xa3f, ['Gurmukhi']], + ], + [ # 0xa40 -> 0xa7f + [ 0xa42, ['Gurmukhi']], + [ 0xa46, ['Unknown']], + [ 0xa48, ['Gurmukhi']], + [ 0xa4a, ['Unknown']], + [ 0xa4d, ['Gurmukhi']], + [ 0xa50, ['Unknown']], + [ 0xa52, ['Gurmukhi']], + [ 0xa58, ['Unknown']], + [ 0xa5c, ['Gurmukhi']], + [ 0xa5d, ['Unknown']], + [ 0xa5f, ['Gurmukhi']], + [ 0xa65, ['Unknown']], + [ 0xa6f, ['Gurmukhi', 'Multani']], + [ 0xa77, ['Gurmukhi']], + [ 0xa7f, ['Unknown']], + ], + [ # 0xa80 -> 0xabf + [ 0xa80, ['Unknown']], + [ 0xa8d, ['Gujarati']], + [ 0xa8e, ['Unknown']], + [ 0xa91, ['Gujarati']], + [ 0xa92, ['Unknown']], + [ 0xaa8, ['Gujarati']], + [ 0xaa9, ['Unknown']], + [ 0xab0, ['Gujarati']], + [ 0xab1, ['Unknown']], + [ 0xab3, ['Gujarati']], + [ 0xab4, ['Unknown']], + [ 0xab9, ['Gujarati']], + [ 0xabb, ['Unknown']], + [ 0xabf, ['Gujarati']], + ], + [ # 0xac0 -> 0xaff + [ 0xac5, ['Gujarati']], + [ 0xac6, ['Unknown']], + [ 0xace, ['Gujarati']], + [ 0xacf, ['Unknown']], + [ 0xad1, ['Gujarati']], + [ 0xadf, ['Unknown']], + [ 0xae3, ['Gujarati']], + [ 0xae5, ['Unknown']], + [ 0xaef, ['Gujarati', 'Khojki']], + [ 0xaf2, ['Gujarati']], + [ 0xaf8, ['Unknown']], + [ 0xaff, ['Gujarati']], + ], + [ # 0xb00 -> 0xb3f + [ 0xb00, ['Unknown']], + [ 0xb03, ['Oriya']], + [ 0xb04, ['Unknown']], + [ 0xb0c, ['Oriya']], + [ 0xb0e, ['Unknown']], + [ 0xb10, ['Oriya']], + [ 0xb12, ['Unknown']], + [ 0xb28, ['Oriya']], + [ 0xb29, ['Unknown']], + [ 0xb30, ['Oriya']], + [ 0xb31, ['Unknown']], + [ 0xb33, ['Oriya']], + [ 0xb34, ['Unknown']], + [ 0xb39, ['Oriya']], + [ 0xb3b, ['Unknown']], + [ 0xb3f, ['Oriya']], + ], + [ # 0xb40 -> 0xb7f + [ 0xb44, ['Oriya']], + [ 0xb46, ['Unknown']], + [ 0xb48, ['Oriya']], + [ 0xb4a, ['Unknown']], + [ 0xb4e, ['Oriya']], + [ 0xb54, ['Unknown']], + [ 0xb58, ['Oriya']], + [ 0xb5b, ['Unknown']], + [ 0xb5d, ['Oriya']], + [ 0xb5e, ['Unknown']], + [ 0xb63, ['Oriya']], + [ 0xb65, ['Unknown']], + [ 0xb77, ['Oriya']], + [ 0xb7f, ['Unknown']], + ], + [ # 0xb80 -> 0xbbf + [ 0xb81, ['Unknown']], + [ 0xb8a, ['Tamil']], + [ 0xb8d, ['Unknown']], + [ 0xb90, ['Tamil']], + [ 0xb91, ['Unknown']], + [ 0xb95, ['Tamil']], + [ 0xb98, ['Unknown']], + [ 0xb9a, ['Tamil']], + [ 0xb9b, ['Unknown']], + [ 0xb9f, ['Tamil']], + [ 0xba2, ['Unknown']], + [ 0xba4, ['Tamil']], + [ 0xba7, ['Unknown']], + [ 0xbaa, ['Tamil']], + [ 0xbad, ['Unknown']], + [ 0xbb9, ['Tamil']], + [ 0xbbd, ['Unknown']], + [ 0xbbf, ['Tamil']], + ], + [ # 0xbc0 -> 0xbff + [ 0xbc2, ['Tamil']], + [ 0xbc5, ['Unknown']], + [ 0xbc8, ['Tamil']], + [ 0xbc9, ['Unknown']], + [ 0xbce, ['Tamil']], + [ 0xbcf, ['Unknown']], + [ 0xbd1, ['Tamil']], + [ 0xbd6, ['Unknown']], + [ 0xbd8, ['Tamil']], + [ 0xbe5, ['Unknown']], + [ 0xbf4, ['Grantha', 'Tamil']], + [ 0xbfb, ['Tamil']], + [ 0xbff, ['Unknown']], + ], + [ # 0xc00 -> 0xc3f + [ 0xc0c, ['Telugu']], + [ 0xc0d, ['Unknown']], + [ 0xc10, ['Telugu']], + [ 0xc11, ['Unknown']], + [ 0xc28, ['Telugu']], + [ 0xc29, ['Unknown']], + [ 0xc39, ['Telugu']], + [ 0xc3b, ['Unknown']], + [ 0xc3f, ['Telugu']], + ], + [ # 0xc40 -> 0xc7f + [ 0xc44, ['Telugu']], + [ 0xc45, ['Unknown']], + [ 0xc48, ['Telugu']], + [ 0xc49, ['Unknown']], + [ 0xc4d, ['Telugu']], + [ 0xc54, ['Unknown']], + [ 0xc56, ['Telugu']], + [ 0xc57, ['Unknown']], + [ 0xc5a, ['Telugu']], + [ 0xc5c, ['Unknown']], + [ 0xc5e, ['Telugu']], + [ 0xc5f, ['Unknown']], + [ 0xc63, ['Telugu']], + [ 0xc65, ['Unknown']], + [ 0xc6f, ['Telugu']], + [ 0xc76, ['Unknown']], + [ 0xc7f, ['Telugu']], + ], + [ # 0xc80 -> 0xcbf + [ 0xc80, ['Kannada', 'Telugu']], + [ 0xc8c, ['Kannada']], + [ 0xc8d, ['Unknown']], + [ 0xc90, ['Kannada']], + [ 0xc91, ['Unknown']], + [ 0xca8, ['Kannada']], + [ 0xca9, ['Unknown']], + [ 0xcb3, ['Kannada']], + [ 0xcb4, ['Unknown']], + [ 0xcb9, ['Kannada']], + [ 0xcbb, ['Unknown']], + [ 0xcbf, ['Kannada']], + ], + [ # 0xcc0 -> 0xcff + [ 0xcc4, ['Kannada']], + [ 0xcc5, ['Unknown']], + [ 0xcc8, ['Kannada']], + [ 0xcc9, ['Unknown']], + [ 0xccd, ['Kannada']], + [ 0xcd4, ['Unknown']], + [ 0xcd6, ['Kannada']], + [ 0xcdc, ['Unknown']], + [ 0xcde, ['Kannada']], + [ 0xcdf, ['Unknown']], + [ 0xce3, ['Kannada']], + [ 0xce5, ['Unknown']], + [ 0xcef, ['Kannada', 'Nandinagari']], + [ 0xcf0, ['Unknown']], + [ 0xcf4, ['Kannada']], + [ 0xcff, ['Unknown']], + ], + [ # 0xd00 -> 0xd3f + [ 0xd0c, ['Malayalam']], + [ 0xd0d, ['Unknown']], + [ 0xd10, ['Malayalam']], + [ 0xd11, ['Unknown']], + [ 0xd3f, ['Malayalam']], + ], + [ # 0xd40 -> 0xd7f + [ 0xd44, ['Malayalam']], + [ 0xd45, ['Unknown']], + [ 0xd48, ['Malayalam']], + [ 0xd49, ['Unknown']], + [ 0xd50, ['Malayalam']], + [ 0xd53, ['Unknown']], + [ 0xd63, ['Malayalam']], + [ 0xd65, ['Unknown']], + [ 0xd7f, ['Malayalam']], + ], + [ # 0xd80 -> 0xdbf + [ 0xd80, ['Unknown']], + [ 0xd83, ['Sinhala']], + [ 0xd84, ['Unknown']], + [ 0xd96, ['Sinhala']], + [ 0xd99, ['Unknown']], + [ 0xdb1, ['Sinhala']], + [ 0xdb2, ['Unknown']], + [ 0xdbb, ['Sinhala']], + [ 0xdbc, ['Unknown']], + [ 0xdbe, ['Sinhala']], + [ 0xdbf, ['Unknown']], + ], + [ # 0xdc0 -> 0xdff + [ 0xdc6, ['Sinhala']], + [ 0xdc9, ['Unknown']], + [ 0xdcb, ['Sinhala']], + [ 0xdce, ['Unknown']], + [ 0xdd4, ['Sinhala']], + [ 0xdd5, ['Unknown']], + [ 0xddf, ['Sinhala']], + [ 0xde5, ['Unknown']], + [ 0xdef, ['Sinhala']], + [ 0xdf1, ['Unknown']], + [ 0xdf5, ['Sinhala']], + [ 0xdff, ['Unknown']], + ], + [ # 0xe00 -> 0xe3f + [ 0xe00, ['Unknown']], + [ 0xe3a, ['Thai']], + [ 0xe3e, ['Unknown']], + [ 0xe3f, ['Common']], + ], + [ # 0xe40 -> 0xe7f + [ 0xe40, ['Common', 'Thai']], + [ 0xe5b, ['Thai']], + [ 0xe7f, ['Unknown']], + ], + [ # 0xe80 -> 0xebf + [ 0xe80, ['Unknown']], + [ 0xe82, ['Lao']], + [ 0xe83, ['Unknown']], + [ 0xe8a, ['Lao']], + [ 0xe8b, ['Unknown']], + [ 0xea3, ['Lao']], + [ 0xea4, ['Unknown']], + [ 0xebe, ['Lao']], + [ 0xebf, ['Unknown']], + ], + [ # 0xec0 -> 0xeff + [ 0xec4, ['Lao']], + [ 0xec5, ['Unknown']], + [ 0xece, ['Lao']], + [ 0xecf, ['Unknown']], + [ 0xed9, ['Lao']], + [ 0xedb, ['Unknown']], + [ 0xedf, ['Lao']], + [ 0xeff, ['Unknown']], + ], + [ # 0xf00 -> 0xf3f + [ 0xf3f, ['Tibetan']], + ], + [ # 0xf40 -> 0xf7f + [ 0xf47, ['Tibetan']], + [ 0xf48, ['Unknown']], + [ 0xf6c, ['Tibetan']], + [ 0xf70, ['Unknown']], + [ 0xf7f, ['Tibetan']], + ], + [ # 0xf80 -> 0xfbf + [ 0xf97, ['Tibetan']], + [ 0xf98, ['Unknown']], + [ 0xfbc, ['Tibetan']], + [ 0xfbd, ['Unknown']], + [ 0xfbf, ['Tibetan']], + ], + [ # 0xfc0 -> 0xfff + [ 0xfcc, ['Tibetan']], + [ 0xfcd, ['Unknown']], + [ 0xfd4, ['Tibetan']], + [ 0xfd8, ['Common']], + [ 0xfda, ['Tibetan']], + [ 0xfff, ['Unknown']], + ], + [ # 0x1000 -> 0x103f + [ 0x103f, ['Myanmar']], + ], + [ # 0x1040 -> 0x107f + [ 0x1049, ['Chakma', 'Myanmar', 'Tai_Le']], + [ 0x107f, ['Myanmar']], + ], + [ # 0x1080 -> 0x10bf + [ 0x109f, ['Myanmar']], + [ 0x10bf, ['Georgian']], + ], + [ # 0x10c0 -> 0x10ff + [ 0x10c5, ['Georgian']], + [ 0x10c6, ['Unknown']], + [ 0x10c8, ['Georgian']], + [ 0x10cc, ['Unknown']], + [ 0x10ce, ['Georgian']], + [ 0x10cf, ['Unknown']], + [ 0x10fa, ['Georgian']], + [ 0x10fc, ['Common', 'Georgian', 'Latin']], + [ 0x10ff, ['Georgian']], + ], + [ # 0x1100 -> 0x113f + [ 0x113f, ['Hangul']], + ], + [ # 0x1140 -> 0x117f + [ 0x117f, ['Hangul']], + ], + [ # 0x1180 -> 0x11bf + [ 0x11bf, ['Hangul']], + ], + [ # 0x11c0 -> 0x11ff + [ 0x11ff, ['Hangul']], + ], + [ # 0x1200 -> 0x123f + [ 0x123f, ['Ethiopic']], + ], + [ # 0x1240 -> 0x127f + [ 0x1248, ['Ethiopic']], + [ 0x1249, ['Unknown']], + [ 0x124d, ['Ethiopic']], + [ 0x124f, ['Unknown']], + [ 0x1256, ['Ethiopic']], + [ 0x1257, ['Unknown']], + [ 0x125d, ['Ethiopic']], + [ 0x125f, ['Unknown']], + [ 0x127f, ['Ethiopic']], + ], + [ # 0x1280 -> 0x12bf + [ 0x1288, ['Ethiopic']], + [ 0x1289, ['Unknown']], + [ 0x128d, ['Ethiopic']], + [ 0x128f, ['Unknown']], + [ 0x12b0, ['Ethiopic']], + [ 0x12b1, ['Unknown']], + [ 0x12b5, ['Ethiopic']], + [ 0x12b7, ['Unknown']], + [ 0x12be, ['Ethiopic']], + [ 0x12bf, ['Unknown']], + ], + [ # 0x12c0 -> 0x12ff + [ 0x12c5, ['Ethiopic']], + [ 0x12c7, ['Unknown']], + [ 0x12d6, ['Ethiopic']], + [ 0x12d7, ['Unknown']], + [ 0x12ff, ['Ethiopic']], + ], + [ # 0x1300 -> 0x133f + [ 0x1310, ['Ethiopic']], + [ 0x1311, ['Unknown']], + [ 0x1315, ['Ethiopic']], + [ 0x1317, ['Unknown']], + [ 0x133f, ['Ethiopic']], + ], + [ # 0x1340 -> 0x137f + [ 0x135a, ['Ethiopic']], + [ 0x135c, ['Unknown']], + [ 0x137c, ['Ethiopic']], + [ 0x137f, ['Unknown']], + ], + [ # 0x1380 -> 0x13bf + [ 0x1399, ['Ethiopic']], + [ 0x139f, ['Unknown']], + [ 0x13bf, ['Cherokee']], + ], + [ # 0x13c0 -> 0x13ff + [ 0x13f5, ['Cherokee']], + [ 0x13f7, ['Unknown']], + [ 0x13fd, ['Cherokee']], + [ 0x13ff, ['Unknown']], + ], + [ # 0x1400 -> 0x143f + [ 0x143f, ['Canadian_Aboriginal']], + ], + [ # 0x1440 -> 0x147f + [ 0x147f, ['Canadian_Aboriginal']], + ], + [ # 0x1480 -> 0x14bf + [ 0x14bf, ['Canadian_Aboriginal']], + ], + [ # 0x14c0 -> 0x14ff + [ 0x14ff, ['Canadian_Aboriginal']], + ], + [ # 0x1500 -> 0x153f + [ 0x153f, ['Canadian_Aboriginal']], + ], + [ # 0x1540 -> 0x157f + [ 0x157f, ['Canadian_Aboriginal']], + ], + [ # 0x1580 -> 0x15bf + [ 0x15bf, ['Canadian_Aboriginal']], + ], + [ # 0x15c0 -> 0x15ff + [ 0x15ff, ['Canadian_Aboriginal']], + ], + [ # 0x1600 -> 0x163f + [ 0x163f, ['Canadian_Aboriginal']], + ], + [ # 0x1640 -> 0x167f + [ 0x167f, ['Canadian_Aboriginal']], + ], + [ # 0x1680 -> 0x16bf + [ 0x169d, ['Ogham']], + [ 0x169f, ['Unknown']], + [ 0x16bf, ['Runic']], + ], + [ # 0x16c0 -> 0x16ff + [ 0x16ea, ['Runic']], + [ 0x16ed, ['Common']], + [ 0x16f8, ['Runic']], + [ 0x16ff, ['Unknown']], + ], + [ # 0x1700 -> 0x173f + [ 0x1716, ['Tagalog']], + [ 0x171e, ['Unknown']], + [ 0x171f, ['Tagalog']], + [ 0x1720, ['Hanunoo', 'Tagalog']], + [ 0x1734, ['Hanunoo']], + [ 0x1736, ['Buhid', 'Common', 'Hanunoo', 'Tagalog', 'Tagbanwa']], + [ 0x173f, ['Unknown']], + ], + [ # 0x1740 -> 0x177f + [ 0x1753, ['Buhid']], + [ 0x175f, ['Unknown']], + [ 0x176c, ['Tagbanwa']], + [ 0x176d, ['Unknown']], + [ 0x1770, ['Tagbanwa']], + [ 0x1771, ['Unknown']], + [ 0x1773, ['Tagbanwa']], + [ 0x177f, ['Unknown']], + ], + [ # 0x1780 -> 0x17bf + [ 0x17bf, ['Khmer']], + ], + [ # 0x17c0 -> 0x17ff + [ 0x17de, ['Khmer']], + [ 0x17df, ['Unknown']], + [ 0x17e9, ['Khmer']], + [ 0x17ef, ['Unknown']], + [ 0x17f9, ['Khmer']], + [ 0x17ff, ['Unknown']], + ], + [ # 0x1800 -> 0x183f + [ 0x1801, ['Mongolian']], + [ 0x1803, ['Common', 'Mongolian', 'Phags_Pa']], + [ 0x1804, ['Mongolian']], + [ 0x1806, ['Common', 'Mongolian', 'Phags_Pa']], + [ 0x1819, ['Mongolian']], + [ 0x181f, ['Unknown']], + [ 0x183f, ['Mongolian']], + ], + [ # 0x1840 -> 0x187f + [ 0x1878, ['Mongolian']], + [ 0x187f, ['Unknown']], + ], + [ # 0x1880 -> 0x18bf + [ 0x18ab, ['Mongolian']], + [ 0x18af, ['Unknown']], + [ 0x18bf, ['Canadian_Aboriginal']], + ], + [ # 0x18c0 -> 0x18ff + [ 0x18f5, ['Canadian_Aboriginal']], + [ 0x18ff, ['Unknown']], + ], + [ # 0x1900 -> 0x193f + [ 0x191e, ['Limbu']], + [ 0x191f, ['Unknown']], + [ 0x192b, ['Limbu']], + [ 0x192f, ['Unknown']], + [ 0x193b, ['Limbu']], + [ 0x193f, ['Unknown']], + ], + [ # 0x1940 -> 0x197f + [ 0x1941, ['Limbu']], + [ 0x1943, ['Unknown']], + [ 0x194f, ['Limbu']], + [ 0x196d, ['Tai_Le']], + [ 0x196f, ['Unknown']], + [ 0x1974, ['Tai_Le']], + [ 0x197f, ['Unknown']], + ], + [ # 0x1980 -> 0x19bf + [ 0x19ab, ['New_Tai_Lue']], + [ 0x19af, ['Unknown']], + [ 0x19bf, ['New_Tai_Lue']], + ], + [ # 0x19c0 -> 0x19ff + [ 0x19c9, ['New_Tai_Lue']], + [ 0x19cf, ['Unknown']], + [ 0x19db, ['New_Tai_Lue']], + [ 0x19dd, ['Unknown']], + [ 0x19df, ['New_Tai_Lue']], + [ 0x19ff, ['Khmer']], + ], + [ # 0x1a00 -> 0x1a3f + [ 0x1a1c, ['Buginese']], + [ 0x1a1d, ['Unknown']], + [ 0x1a1f, ['Buginese']], + [ 0x1a3f, ['Tai_Tham']], + ], + [ # 0x1a40 -> 0x1a7f + [ 0x1a5e, ['Tai_Tham']], + [ 0x1a5f, ['Unknown']], + [ 0x1a7c, ['Tai_Tham']], + [ 0x1a7e, ['Unknown']], + [ 0x1a7f, ['Tai_Tham']], + ], + [ # 0x1a80 -> 0x1abf + [ 0x1a89, ['Tai_Tham']], + [ 0x1a8f, ['Unknown']], + [ 0x1a99, ['Tai_Tham']], + [ 0x1a9f, ['Unknown']], + [ 0x1aad, ['Tai_Tham']], + [ 0x1aaf, ['Unknown']], + [ 0x1abf, ['Inherited']], + ], + [ # 0x1ac0 -> 0x1aff + [ 0x1ace, ['Inherited']], + [ 0x1aff, ['Unknown']], + ], + [ # 0x1b00 -> 0x1b3f + [ 0x1b3f, ['Balinese']], + ], + [ # 0x1b40 -> 0x1b7f + [ 0x1b4c, ['Balinese']], + [ 0x1b4f, ['Unknown']], + [ 0x1b7e, ['Balinese']], + [ 0x1b7f, ['Unknown']], + ], + [ # 0x1b80 -> 0x1bbf + [ 0x1bbf, ['Sundanese']], + ], + [ # 0x1bc0 -> 0x1bff + [ 0x1bf3, ['Batak']], + [ 0x1bfb, ['Unknown']], + [ 0x1bff, ['Batak']], + ], + [ # 0x1c00 -> 0x1c3f + [ 0x1c37, ['Lepcha']], + [ 0x1c3a, ['Unknown']], + [ 0x1c3f, ['Lepcha']], + ], + [ # 0x1c40 -> 0x1c7f + [ 0x1c49, ['Lepcha']], + [ 0x1c4c, ['Unknown']], + [ 0x1c4f, ['Lepcha']], + [ 0x1c7f, ['Ol_Chiki']], + ], + [ # 0x1c80 -> 0x1cbf + [ 0x1c88, ['Cyrillic']], + [ 0x1c8f, ['Unknown']], + [ 0x1cba, ['Georgian']], + [ 0x1cbc, ['Unknown']], + [ 0x1cbf, ['Georgian']], + ], + [ # 0x1cc0 -> 0x1cff + [ 0x1cc7, ['Sundanese']], + [ 0x1ccf, ['Unknown']], + [ 0x1cd2, ['Bengali', 'Devanagari', 'Grantha', 'Inherited', 'Kannada']], + [ 0x1cd3, ['Bengali', 'Common', 'Devanagari', 'Grantha', 'Kannada']], + [ 0x1cd4, ['Common', 'Devanagari', 'Grantha', 'Inherited']], + [ 0x1cd6, ['Bengali', 'Devanagari', 'Inherited']], + [ 0x1cd7, ['Devanagari', 'Inherited', 'Sharada']], + [ 0x1cd9, ['Bengali', 'Devanagari', 'Inherited', 'Sharada']], + [ 0x1cda, ['Devanagari', 'Inherited', 'Kannada', 'Malayalam', 'Oriya', 'Sharada', 'Tamil', 'Telugu']], + [ 0x1cdb, ['Devanagari', 'Inherited', 'Kannada', 'Malayalam', 'Oriya', 'Tamil', 'Telugu']], + [ 0x1cdd, ['Devanagari', 'Inherited', 'Sharada']], + [ 0x1cdf, ['Devanagari', 'Inherited']], + [ 0x1ce0, ['Devanagari', 'Inherited', 'Sharada']], + [ 0x1ce1, ['Bengali', 'Common', 'Devanagari', 'Sharada']], + [ 0x1ce2, ['Bengali', 'Common', 'Devanagari', 'Inherited']], + [ 0x1ce8, ['Devanagari', 'Inherited']], + [ 0x1ce9, ['Common', 'Devanagari', 'Nandinagari']], + [ 0x1cea, ['Bengali', 'Common', 'Devanagari', 'Nandinagari']], + [ 0x1ceb, ['Bengali', 'Common', 'Devanagari']], + [ 0x1cec, ['Common', 'Devanagari']], + [ 0x1ced, ['Bengali', 'Devanagari', 'Inherited']], + [ 0x1cee, ['Bengali', 'Common', 'Devanagari', 'Inherited']], + [ 0x1cf1, ['Common', 'Devanagari']], + [ 0x1cf3, ['Bengali', 'Common', 'Devanagari', 'Grantha', 'Kannada', 'Malayalam', 'Nandinagari', 'Oriya', 'Sinhala', 'Telugu', 'Tirhuta']], + [ 0x1cf4, ['Devanagari', 'Grantha', 'Inherited', 'Kannada']], + [ 0x1cf5, ['Bengali', 'Common', 'Devanagari', 'Grantha', 'Inherited', 'Kannada']], + [ 0x1cf6, ['Bengali', 'Common', 'Devanagari']], + [ 0x1cf7, ['Bengali', 'Common']], + [ 0x1cf8, ['Bengali', 'Common', 'Devanagari', 'Grantha', 'Inherited']], + [ 0x1cf9, ['Devanagari', 'Grantha', 'Inherited']], + [ 0x1cfb, ['Common', 'Nandinagari']], + [ 0x1cff, ['Unknown']], + ], + [ # 0x1d00 -> 0x1d3f + [ 0x1d25, ['Latin']], + [ 0x1d2a, ['Greek']], + [ 0x1d2b, ['Cyrillic']], + [ 0x1d2c, ['Cyrillic', 'Latin']], + [ 0x1d3f, ['Latin']], + ], + [ # 0x1d40 -> 0x1d7f + [ 0x1d5c, ['Latin']], + [ 0x1d61, ['Greek']], + [ 0x1d65, ['Latin']], + [ 0x1d6a, ['Greek']], + [ 0x1d77, ['Latin']], + [ 0x1d78, ['Cyrillic']], + [ 0x1d79, ['Cyrillic', 'Latin']], + [ 0x1d7f, ['Latin']], + ], + [ # 0x1d80 -> 0x1dbf + [ 0x1dbe, ['Latin']], + [ 0x1dbf, ['Greek']], + ], + [ # 0x1dc0 -> 0x1dff + [ 0x1dc1, ['Greek', 'Inherited']], + [ 0x1df7, ['Inherited']], + [ 0x1df9, ['Cyrillic', 'Inherited', 'Syriac']], + [ 0x1dfb, ['Inherited', 'Syriac']], + [ 0x1dff, ['Inherited']], + ], + [ # 0x1e00 -> 0x1e3f + [ 0x1e3f, ['Latin']], + ], + [ # 0x1e40 -> 0x1e7f + [ 0x1e7f, ['Latin']], + ], + [ # 0x1e80 -> 0x1ebf + [ 0x1ebf, ['Latin']], + ], + [ # 0x1ec0 -> 0x1eff + [ 0x1eff, ['Latin']], + ], + [ # 0x1f00 -> 0x1f3f + [ 0x1f15, ['Greek']], + [ 0x1f17, ['Unknown']], + [ 0x1f1d, ['Greek']], + [ 0x1f1f, ['Unknown']], + [ 0x1f3f, ['Greek']], + ], + [ # 0x1f40 -> 0x1f7f + [ 0x1f45, ['Greek']], + [ 0x1f47, ['Unknown']], + [ 0x1f4d, ['Greek']], + [ 0x1f4f, ['Unknown']], + [ 0x1f57, ['Greek']], + [ 0x1f58, ['Unknown']], + [ 0x1f7d, ['Greek']], + [ 0x1f7f, ['Unknown']], + ], + [ # 0x1f80 -> 0x1fbf + [ 0x1fb4, ['Greek']], + [ 0x1fb5, ['Unknown']], + [ 0x1fbf, ['Greek']], + ], + [ # 0x1fc0 -> 0x1fff + [ 0x1fc4, ['Greek']], + [ 0x1fc5, ['Unknown']], + [ 0x1fd3, ['Greek']], + [ 0x1fd5, ['Unknown']], + [ 0x1fdb, ['Greek']], + [ 0x1fdc, ['Unknown']], + [ 0x1fef, ['Greek']], + [ 0x1ff1, ['Unknown']], + [ 0x1ff4, ['Greek']], + [ 0x1ff5, ['Unknown']], + [ 0x1ffe, ['Greek']], + [ 0x1fff, ['Unknown']], + ], + [ # 0x2000 -> 0x203f + [ 0x200b, ['Common']], + [ 0x200c, ['Common', 'Inherited']], + [ 0x200d, ['Inherited']], + [ 0x202e, ['Common']], + [ 0x2030, ['Common', 'Latin', 'Mongolian']], + [ 0x203f, ['Common']], + ], + [ # 0x2040 -> 0x207f + [ 0x2064, ['Common']], + [ 0x2065, ['Unknown']], + [ 0x2070, ['Common']], + [ 0x2071, ['Common', 'Latin']], + [ 0x2072, ['Latin']], + [ 0x2073, ['Unknown']], + [ 0x207e, ['Common']], + [ 0x207f, ['Common', 'Latin']], + ], + [ # 0x2080 -> 0x20bf + [ 0x2080, ['Common', 'Latin']], + [ 0x208f, ['Common']], + [ 0x209c, ['Latin']], + [ 0x209f, ['Unknown']], + [ 0x20bf, ['Common']], + ], + [ # 0x20c0 -> 0x20ff + [ 0x20c0, ['Common']], + [ 0x20cf, ['Unknown']], + [ 0x20ef, ['Inherited']], + [ 0x20f0, ['Devanagari', 'Grantha', 'Inherited', 'Latin']], + [ 0x20f1, ['Devanagari', 'Grantha', 'Latin']], + [ 0x20ff, ['Unknown']], + ], + [ # 0x2100 -> 0x213f + [ 0x2125, ['Common']], + [ 0x2127, ['Common', 'Greek']], + [ 0x2129, ['Common']], + [ 0x212a, ['Common', 'Latin']], + [ 0x212b, ['Latin']], + [ 0x2131, ['Common']], + [ 0x2132, ['Latin']], + [ 0x2133, ['Common', 'Latin']], + [ 0x213f, ['Common']], + ], + [ # 0x2140 -> 0x217f + [ 0x214d, ['Common']], + [ 0x214e, ['Latin']], + [ 0x214f, ['Common', 'Latin']], + [ 0x215f, ['Common']], + [ 0x217f, ['Latin']], + ], + [ # 0x2180 -> 0x21bf + [ 0x2188, ['Latin']], + [ 0x218b, ['Common']], + [ 0x218f, ['Unknown']], + [ 0x21bf, ['Common']], + ], + [ # 0x21c0 -> 0x21ff + [ 0x21ff, ['Common']], + ], + [ # 0x2200 -> 0x223f + [ 0x223f, ['Common']], + ], + [ # 0x2240 -> 0x227f + [ 0x227f, ['Common']], + ], + [ # 0x2280 -> 0x22bf + [ 0x22bf, ['Common']], + ], + [ # 0x22c0 -> 0x22ff + [ 0x22ff, ['Common']], + ], + [ # 0x2300 -> 0x233f + [ 0x233f, ['Common']], + ], + [ # 0x2340 -> 0x237f + [ 0x237f, ['Common']], + ], + [ # 0x2380 -> 0x23bf + [ 0x23bf, ['Common']], + ], + [ # 0x23c0 -> 0x23ff + [ 0x23ff, ['Common']], + ], + [ # 0x2400 -> 0x243f + [ 0x2426, ['Common']], + [ 0x243f, ['Unknown']], + ], + [ # 0x2440 -> 0x247f + [ 0x244a, ['Common']], + [ 0x245f, ['Unknown']], + [ 0x247f, ['Common']], + ], + [ # 0x2480 -> 0x24bf + [ 0x24bf, ['Common']], + ], + [ # 0x24c0 -> 0x24ff + [ 0x24ff, ['Common']], + ], + [ # 0x2500 -> 0x253f + [ 0x253f, ['Common']], + ], + [ # 0x2540 -> 0x257f + [ 0x257f, ['Common']], + ], + [ # 0x2580 -> 0x25bf + [ 0x25bf, ['Common']], + ], + [ # 0x25c0 -> 0x25ff + [ 0x25ff, ['Common']], + ], + [ # 0x2600 -> 0x263f + [ 0x263f, ['Common']], + ], + [ # 0x2640 -> 0x267f + [ 0x267f, ['Common']], + ], + [ # 0x2680 -> 0x26bf + [ 0x26bf, ['Common']], + ], + [ # 0x26c0 -> 0x26ff + [ 0x26ff, ['Common']], + ], + [ # 0x2700 -> 0x273f + [ 0x273f, ['Common']], + ], + [ # 0x2740 -> 0x277f + [ 0x277f, ['Common']], + ], + [ # 0x2780 -> 0x27bf + [ 0x27bf, ['Common']], + ], + [ # 0x27c0 -> 0x27ff + [ 0x27ff, ['Common']], + ], + [ # 0x2800 -> 0x283f + [ 0x283f, ['Braille']], + ], + [ # 0x2840 -> 0x287f + [ 0x287f, ['Braille']], + ], + [ # 0x2880 -> 0x28bf + [ 0x28bf, ['Braille']], + ], + [ # 0x28c0 -> 0x28ff + [ 0x28ff, ['Braille']], + ], + [ # 0x2900 -> 0x293f + [ 0x293f, ['Common']], + ], + [ # 0x2940 -> 0x297f + [ 0x297f, ['Common']], + ], + [ # 0x2980 -> 0x29bf + [ 0x29bf, ['Common']], + ], + [ # 0x29c0 -> 0x29ff + [ 0x29ff, ['Common']], + ], + [ # 0x2a00 -> 0x2a3f + [ 0x2a3f, ['Common']], + ], + [ # 0x2a40 -> 0x2a7f + [ 0x2a7f, ['Common']], + ], + [ # 0x2a80 -> 0x2abf + [ 0x2abf, ['Common']], + ], + [ # 0x2ac0 -> 0x2aff + [ 0x2aff, ['Common']], + ], + [ # 0x2b00 -> 0x2b3f + [ 0x2b3f, ['Common']], + ], + [ # 0x2b40 -> 0x2b7f + [ 0x2b73, ['Common']], + [ 0x2b75, ['Unknown']], + [ 0x2b7f, ['Common']], + ], + [ # 0x2b80 -> 0x2bbf + [ 0x2b95, ['Common']], + [ 0x2b96, ['Unknown']], + [ 0x2bbf, ['Common']], + ], + [ # 0x2bc0 -> 0x2bff + [ 0x2bff, ['Common']], + ], + [ # 0x2c00 -> 0x2c3f + [ 0x2c3f, ['Glagolitic']], + ], + [ # 0x2c40 -> 0x2c7f + [ 0x2c5f, ['Glagolitic']], + [ 0x2c7f, ['Latin']], + ], + [ # 0x2c80 -> 0x2cbf + [ 0x2cbf, ['Coptic']], + ], + [ # 0x2cc0 -> 0x2cff + [ 0x2cf3, ['Coptic']], + [ 0x2cf8, ['Unknown']], + [ 0x2cff, ['Coptic']], + ], + [ # 0x2d00 -> 0x2d3f + [ 0x2d25, ['Georgian']], + [ 0x2d26, ['Unknown']], + [ 0x2d28, ['Georgian']], + [ 0x2d2c, ['Unknown']], + [ 0x2d2e, ['Georgian']], + [ 0x2d2f, ['Unknown']], + [ 0x2d3f, ['Tifinagh']], + ], + [ # 0x2d40 -> 0x2d7f + [ 0x2d67, ['Tifinagh']], + [ 0x2d6e, ['Unknown']], + [ 0x2d71, ['Tifinagh']], + [ 0x2d7e, ['Unknown']], + [ 0x2d7f, ['Tifinagh']], + ], + [ # 0x2d80 -> 0x2dbf + [ 0x2d80, ['Ethiopic', 'Tifinagh']], + [ 0x2d96, ['Ethiopic']], + [ 0x2d9f, ['Unknown']], + [ 0x2da6, ['Ethiopic']], + [ 0x2da7, ['Unknown']], + [ 0x2dae, ['Ethiopic']], + [ 0x2daf, ['Unknown']], + [ 0x2db6, ['Ethiopic']], + [ 0x2db7, ['Unknown']], + [ 0x2dbe, ['Ethiopic']], + [ 0x2dbf, ['Unknown']], + ], + [ # 0x2dc0 -> 0x2dff + [ 0x2dc6, ['Ethiopic']], + [ 0x2dc7, ['Unknown']], + [ 0x2dce, ['Ethiopic']], + [ 0x2dcf, ['Unknown']], + [ 0x2dd6, ['Ethiopic']], + [ 0x2dd7, ['Unknown']], + [ 0x2dde, ['Ethiopic']], + [ 0x2ddf, ['Unknown']], + [ 0x2dff, ['Cyrillic']], + ], + [ # 0x2e00 -> 0x2e3f + [ 0x2e3f, ['Common']], + ], + [ # 0x2e40 -> 0x2e7f + [ 0x2e42, ['Common']], + [ 0x2e44, ['Common', 'Cyrillic', 'Glagolitic']], + [ 0x2e5e, ['Common']], + [ 0x2e7f, ['Unknown']], + ], + [ # 0x2e80 -> 0x2ebf + [ 0x2e99, ['Han']], + [ 0x2e9a, ['Unknown']], + [ 0x2ebf, ['Han']], + ], + [ # 0x2ec0 -> 0x2eff + [ 0x2ef3, ['Han']], + [ 0x2eff, ['Unknown']], + ], + [ # 0x2f00 -> 0x2f3f + [ 0x2f3f, ['Han']], + ], + [ # 0x2f40 -> 0x2f7f + [ 0x2f7f, ['Han']], + ], + [ # 0x2f80 -> 0x2fbf + [ 0x2fbf, ['Han']], + ], + [ # 0x2fc0 -> 0x2fff + [ 0x2fd5, ['Han']], + [ 0x2fef, ['Unknown']], + [ 0x2fff, ['Common']], + ], + [ # 0x3000 -> 0x303f + [ 0x3000, ['Common']], + [ 0x3002, ['Bopomofo', 'Common', 'Han', 'Hangul', 'Hiragana', 'Katakana', 'Yi']], + [ 0x3004, ['Bopomofo', 'Common', 'Han', 'Hangul', 'Hiragana', 'Katakana']], + [ 0x3007, ['Common', 'Han']], + [ 0x3012, ['Bopomofo', 'Common', 'Han', 'Hangul', 'Hiragana', 'Katakana', 'Yi']], + [ 0x3013, ['Bopomofo', 'Common', 'Han', 'Hangul', 'Hiragana', 'Katakana']], + [ 0x301c, ['Bopomofo', 'Common', 'Han', 'Hangul', 'Hiragana', 'Katakana', 'Yi']], + [ 0x301f, ['Bopomofo', 'Common', 'Han', 'Hangul', 'Hiragana', 'Katakana']], + [ 0x3020, ['Common']], + [ 0x3021, ['Common', 'Han']], + [ 0x3029, ['Han']], + [ 0x302d, ['Bopomofo', 'Han', 'Inherited']], + [ 0x302f, ['Hangul']], + [ 0x3031, ['Bopomofo', 'Common', 'Han', 'Hangul', 'Hiragana', 'Katakana']], + [ 0x3035, ['Common', 'Hiragana', 'Katakana']], + [ 0x3036, ['Common']], + [ 0x3037, ['Bopomofo', 'Common', 'Han', 'Hangul', 'Hiragana', 'Katakana']], + [ 0x3038, ['Bopomofo', 'Han', 'Hangul', 'Hiragana', 'Katakana']], + [ 0x303b, ['Han']], + [ 0x303e, ['Common', 'Han', 'Hiragana', 'Katakana']], + [ 0x303f, ['Common', 'Han']], + ], + [ # 0x3040 -> 0x307f + [ 0x3040, ['Unknown']], + [ 0x307f, ['Hiragana']], + ], + [ # 0x3080 -> 0x30bf + [ 0x3096, ['Hiragana']], + [ 0x3098, ['Unknown']], + [ 0x309a, ['Hiragana', 'Inherited', 'Katakana']], + [ 0x309c, ['Common', 'Hiragana', 'Katakana']], + [ 0x309f, ['Hiragana']], + [ 0x30a1, ['Common', 'Hiragana', 'Katakana']], + [ 0x30bf, ['Katakana']], + ], + [ # 0x30c0 -> 0x30ff + [ 0x30fa, ['Katakana']], + [ 0x30fc, ['Bopomofo', 'Common', 'Han', 'Hangul', 'Hiragana', 'Katakana', 'Yi']], + [ 0x30fd, ['Common', 'Hiragana', 'Katakana']], + [ 0x30ff, ['Katakana']], + ], + [ # 0x3100 -> 0x313f + [ 0x3100, ['Katakana']], + [ 0x3104, ['Unknown']], + [ 0x312f, ['Bopomofo']], + [ 0x3130, ['Unknown']], + [ 0x313f, ['Hangul']], + ], + [ # 0x3140 -> 0x317f + [ 0x317f, ['Hangul']], + ], + [ # 0x3180 -> 0x31bf + [ 0x318e, ['Hangul']], + [ 0x318f, ['Unknown']], + [ 0x319f, ['Common', 'Han']], + [ 0x31bf, ['Bopomofo']], + ], + [ # 0x31c0 -> 0x31ff + [ 0x31e3, ['Common', 'Han']], + [ 0x31ee, ['Unknown']], + [ 0x31ef, ['Common']], + [ 0x31f0, ['Common', 'Katakana']], + [ 0x31ff, ['Katakana']], + ], + [ # 0x3200 -> 0x323f + [ 0x321e, ['Hangul']], + [ 0x321f, ['Unknown']], + [ 0x323f, ['Common', 'Han']], + ], + [ # 0x3240 -> 0x327f + [ 0x3247, ['Common', 'Han']], + [ 0x325f, ['Common']], + [ 0x327e, ['Hangul']], + [ 0x327f, ['Common']], + ], + [ # 0x3280 -> 0x32bf + [ 0x32b0, ['Common', 'Han']], + [ 0x32bf, ['Common']], + ], + [ # 0x32c0 -> 0x32ff + [ 0x32cb, ['Common', 'Han']], + [ 0x32cf, ['Common']], + [ 0x32fe, ['Katakana']], + [ 0x32ff, ['Common', 'Han']], + ], + [ # 0x3300 -> 0x333f + [ 0x3300, ['Common', 'Han', 'Katakana']], + [ 0x333f, ['Katakana']], + ], + [ # 0x3340 -> 0x337f + [ 0x3357, ['Katakana']], + [ 0x3370, ['Common', 'Han']], + [ 0x337a, ['Common']], + [ 0x337f, ['Common', 'Han']], + ], + [ # 0x3380 -> 0x33bf + [ 0x33bf, ['Common']], + ], + [ # 0x33c0 -> 0x33ff + [ 0x33df, ['Common']], + [ 0x33fe, ['Common', 'Han']], + [ 0x33ff, ['Common']], + ], + [ # 0x3400 -> 0x343f + [ 0x343f, ['Han']], + ], + [ # 0x3440 -> 0x347f + [ 0x347f, ['Han']], + ], + [ # 0x3480 -> 0x34bf + [ 0x34bf, ['Han']], + ], + [ # 0x34c0 -> 0x34ff + [ 0x34ff, ['Han']], + ], + [ # 0x3500 -> 0x353f + [ 0x353f, ['Han']], + ], + [ # 0x3540 -> 0x357f + [ 0x357f, ['Han']], + ], + [ # 0x3580 -> 0x35bf + [ 0x35bf, ['Han']], + ], + [ # 0x35c0 -> 0x35ff + [ 0x35ff, ['Han']], + ], + [ # 0x3600 -> 0x363f + [ 0x363f, ['Han']], + ], + [ # 0x3640 -> 0x367f + [ 0x367f, ['Han']], + ], + [ # 0x3680 -> 0x36bf + [ 0x36bf, ['Han']], + ], + [ # 0x36c0 -> 0x36ff + [ 0x36ff, ['Han']], + ], + [ # 0x3700 -> 0x373f + [ 0x373f, ['Han']], + ], + [ # 0x3740 -> 0x377f + [ 0x377f, ['Han']], + ], + [ # 0x3780 -> 0x37bf + [ 0x37bf, ['Han']], + ], + [ # 0x37c0 -> 0x37ff + [ 0x37ff, ['Han']], + ], + [ # 0x3800 -> 0x383f + [ 0x383f, ['Han']], + ], + [ # 0x3840 -> 0x387f + [ 0x387f, ['Han']], + ], + [ # 0x3880 -> 0x38bf + [ 0x38bf, ['Han']], + ], + [ # 0x38c0 -> 0x38ff + [ 0x38ff, ['Han']], + ], + [ # 0x3900 -> 0x393f + [ 0x393f, ['Han']], + ], + [ # 0x3940 -> 0x397f + [ 0x397f, ['Han']], + ], + [ # 0x3980 -> 0x39bf + [ 0x39bf, ['Han']], + ], + [ # 0x39c0 -> 0x39ff + [ 0x39ff, ['Han']], + ], + [ # 0x3a00 -> 0x3a3f + [ 0x3a3f, ['Han']], + ], + [ # 0x3a40 -> 0x3a7f + [ 0x3a7f, ['Han']], + ], + [ # 0x3a80 -> 0x3abf + [ 0x3abf, ['Han']], + ], + [ # 0x3ac0 -> 0x3aff + [ 0x3aff, ['Han']], + ], + [ # 0x3b00 -> 0x3b3f + [ 0x3b3f, ['Han']], + ], + [ # 0x3b40 -> 0x3b7f + [ 0x3b7f, ['Han']], + ], + [ # 0x3b80 -> 0x3bbf + [ 0x3bbf, ['Han']], + ], + [ # 0x3bc0 -> 0x3bff + [ 0x3bff, ['Han']], + ], + [ # 0x3c00 -> 0x3c3f + [ 0x3c3f, ['Han']], + ], + [ # 0x3c40 -> 0x3c7f + [ 0x3c7f, ['Han']], + ], + [ # 0x3c80 -> 0x3cbf + [ 0x3cbf, ['Han']], + ], + [ # 0x3cc0 -> 0x3cff + [ 0x3cff, ['Han']], + ], + [ # 0x3d00 -> 0x3d3f + [ 0x3d3f, ['Han']], + ], + [ # 0x3d40 -> 0x3d7f + [ 0x3d7f, ['Han']], + ], + [ # 0x3d80 -> 0x3dbf + [ 0x3dbf, ['Han']], + ], + [ # 0x3dc0 -> 0x3dff + [ 0x3dff, ['Han']], + ], + [ # 0x3e00 -> 0x3e3f + [ 0x3e3f, ['Han']], + ], + [ # 0x3e40 -> 0x3e7f + [ 0x3e7f, ['Han']], + ], + [ # 0x3e80 -> 0x3ebf + [ 0x3ebf, ['Han']], + ], + [ # 0x3ec0 -> 0x3eff + [ 0x3eff, ['Han']], + ], + [ # 0x3f00 -> 0x3f3f + [ 0x3f3f, ['Han']], + ], + [ # 0x3f40 -> 0x3f7f + [ 0x3f7f, ['Han']], + ], + [ # 0x3f80 -> 0x3fbf + [ 0x3fbf, ['Han']], + ], + [ # 0x3fc0 -> 0x3fff + [ 0x3fff, ['Han']], + ], + [ # 0x4000 -> 0x403f + [ 0x403f, ['Han']], + ], + [ # 0x4040 -> 0x407f + [ 0x407f, ['Han']], + ], + [ # 0x4080 -> 0x40bf + [ 0x40bf, ['Han']], + ], + [ # 0x40c0 -> 0x40ff + [ 0x40ff, ['Han']], + ], + [ # 0x4100 -> 0x413f + [ 0x413f, ['Han']], + ], + [ # 0x4140 -> 0x417f + [ 0x417f, ['Han']], + ], + [ # 0x4180 -> 0x41bf + [ 0x41bf, ['Han']], + ], + [ # 0x41c0 -> 0x41ff + [ 0x41ff, ['Han']], + ], + [ # 0x4200 -> 0x423f + [ 0x423f, ['Han']], + ], + [ # 0x4240 -> 0x427f + [ 0x427f, ['Han']], + ], + [ # 0x4280 -> 0x42bf + [ 0x42bf, ['Han']], + ], + [ # 0x42c0 -> 0x42ff + [ 0x42ff, ['Han']], + ], + [ # 0x4300 -> 0x433f + [ 0x433f, ['Han']], + ], + [ # 0x4340 -> 0x437f + [ 0x437f, ['Han']], + ], + [ # 0x4380 -> 0x43bf + [ 0x43bf, ['Han']], + ], + [ # 0x43c0 -> 0x43ff + [ 0x43ff, ['Han']], + ], + [ # 0x4400 -> 0x443f + [ 0x443f, ['Han']], + ], + [ # 0x4440 -> 0x447f + [ 0x447f, ['Han']], + ], + [ # 0x4480 -> 0x44bf + [ 0x44bf, ['Han']], + ], + [ # 0x44c0 -> 0x44ff + [ 0x44ff, ['Han']], + ], + [ # 0x4500 -> 0x453f + [ 0x453f, ['Han']], + ], + [ # 0x4540 -> 0x457f + [ 0x457f, ['Han']], + ], + [ # 0x4580 -> 0x45bf + [ 0x45bf, ['Han']], + ], + [ # 0x45c0 -> 0x45ff + [ 0x45ff, ['Han']], + ], + [ # 0x4600 -> 0x463f + [ 0x463f, ['Han']], + ], + [ # 0x4640 -> 0x467f + [ 0x467f, ['Han']], + ], + [ # 0x4680 -> 0x46bf + [ 0x46bf, ['Han']], + ], + [ # 0x46c0 -> 0x46ff + [ 0x46ff, ['Han']], + ], + [ # 0x4700 -> 0x473f + [ 0x473f, ['Han']], + ], + [ # 0x4740 -> 0x477f + [ 0x477f, ['Han']], + ], + [ # 0x4780 -> 0x47bf + [ 0x47bf, ['Han']], + ], + [ # 0x47c0 -> 0x47ff + [ 0x47ff, ['Han']], + ], + [ # 0x4800 -> 0x483f + [ 0x483f, ['Han']], + ], + [ # 0x4840 -> 0x487f + [ 0x487f, ['Han']], + ], + [ # 0x4880 -> 0x48bf + [ 0x48bf, ['Han']], + ], + [ # 0x48c0 -> 0x48ff + [ 0x48ff, ['Han']], + ], + [ # 0x4900 -> 0x493f + [ 0x493f, ['Han']], + ], + [ # 0x4940 -> 0x497f + [ 0x497f, ['Han']], + ], + [ # 0x4980 -> 0x49bf + [ 0x49bf, ['Han']], + ], + [ # 0x49c0 -> 0x49ff + [ 0x49ff, ['Han']], + ], + [ # 0x4a00 -> 0x4a3f + [ 0x4a3f, ['Han']], + ], + [ # 0x4a40 -> 0x4a7f + [ 0x4a7f, ['Han']], + ], + [ # 0x4a80 -> 0x4abf + [ 0x4abf, ['Han']], + ], + [ # 0x4ac0 -> 0x4aff + [ 0x4aff, ['Han']], + ], + [ # 0x4b00 -> 0x4b3f + [ 0x4b3f, ['Han']], + ], + [ # 0x4b40 -> 0x4b7f + [ 0x4b7f, ['Han']], + ], + [ # 0x4b80 -> 0x4bbf + [ 0x4bbf, ['Han']], + ], + [ # 0x4bc0 -> 0x4bff + [ 0x4bff, ['Han']], + ], + [ # 0x4c00 -> 0x4c3f + [ 0x4c3f, ['Han']], + ], + [ # 0x4c40 -> 0x4c7f + [ 0x4c7f, ['Han']], + ], + [ # 0x4c80 -> 0x4cbf + [ 0x4cbf, ['Han']], + ], + [ # 0x4cc0 -> 0x4cff + [ 0x4cff, ['Han']], + ], + [ # 0x4d00 -> 0x4d3f + [ 0x4d3f, ['Han']], + ], + [ # 0x4d40 -> 0x4d7f + [ 0x4d7f, ['Han']], + ], + [ # 0x4d80 -> 0x4dbf + [ 0x4dbf, ['Han']], + ], + [ # 0x4dc0 -> 0x4dff + [ 0x4dff, ['Common']], + ], + [ # 0x4e00 -> 0x4e3f + [ 0x4e3f, ['Han']], + ], + [ # 0x4e40 -> 0x4e7f + [ 0x4e7f, ['Han']], + ], + [ # 0x4e80 -> 0x4ebf + [ 0x4ebf, ['Han']], + ], + [ # 0x4ec0 -> 0x4eff + [ 0x4eff, ['Han']], + ], + [ # 0x4f00 -> 0x4f3f + [ 0x4f3f, ['Han']], + ], + [ # 0x4f40 -> 0x4f7f + [ 0x4f7f, ['Han']], + ], + [ # 0x4f80 -> 0x4fbf + [ 0x4fbf, ['Han']], + ], + [ # 0x4fc0 -> 0x4fff + [ 0x4fff, ['Han']], + ], + [ # 0x5000 -> 0x503f + [ 0x503f, ['Han']], + ], + [ # 0x5040 -> 0x507f + [ 0x507f, ['Han']], + ], + [ # 0x5080 -> 0x50bf + [ 0x50bf, ['Han']], + ], + [ # 0x50c0 -> 0x50ff + [ 0x50ff, ['Han']], + ], + [ # 0x5100 -> 0x513f + [ 0x513f, ['Han']], + ], + [ # 0x5140 -> 0x517f + [ 0x517f, ['Han']], + ], + [ # 0x5180 -> 0x51bf + [ 0x51bf, ['Han']], + ], + [ # 0x51c0 -> 0x51ff + [ 0x51ff, ['Han']], + ], + [ # 0x5200 -> 0x523f + [ 0x523f, ['Han']], + ], + [ # 0x5240 -> 0x527f + [ 0x527f, ['Han']], + ], + [ # 0x5280 -> 0x52bf + [ 0x52bf, ['Han']], + ], + [ # 0x52c0 -> 0x52ff + [ 0x52ff, ['Han']], + ], + [ # 0x5300 -> 0x533f + [ 0x533f, ['Han']], + ], + [ # 0x5340 -> 0x537f + [ 0x537f, ['Han']], + ], + [ # 0x5380 -> 0x53bf + [ 0x53bf, ['Han']], + ], + [ # 0x53c0 -> 0x53ff + [ 0x53ff, ['Han']], + ], + [ # 0x5400 -> 0x543f + [ 0x543f, ['Han']], + ], + [ # 0x5440 -> 0x547f + [ 0x547f, ['Han']], + ], + [ # 0x5480 -> 0x54bf + [ 0x54bf, ['Han']], + ], + [ # 0x54c0 -> 0x54ff + [ 0x54ff, ['Han']], + ], + [ # 0x5500 -> 0x553f + [ 0x553f, ['Han']], + ], + [ # 0x5540 -> 0x557f + [ 0x557f, ['Han']], + ], + [ # 0x5580 -> 0x55bf + [ 0x55bf, ['Han']], + ], + [ # 0x55c0 -> 0x55ff + [ 0x55ff, ['Han']], + ], + [ # 0x5600 -> 0x563f + [ 0x563f, ['Han']], + ], + [ # 0x5640 -> 0x567f + [ 0x567f, ['Han']], + ], + [ # 0x5680 -> 0x56bf + [ 0x56bf, ['Han']], + ], + [ # 0x56c0 -> 0x56ff + [ 0x56ff, ['Han']], + ], + [ # 0x5700 -> 0x573f + [ 0x573f, ['Han']], + ], + [ # 0x5740 -> 0x577f + [ 0x577f, ['Han']], + ], + [ # 0x5780 -> 0x57bf + [ 0x57bf, ['Han']], + ], + [ # 0x57c0 -> 0x57ff + [ 0x57ff, ['Han']], + ], + [ # 0x5800 -> 0x583f + [ 0x583f, ['Han']], + ], + [ # 0x5840 -> 0x587f + [ 0x587f, ['Han']], + ], + [ # 0x5880 -> 0x58bf + [ 0x58bf, ['Han']], + ], + [ # 0x58c0 -> 0x58ff + [ 0x58ff, ['Han']], + ], + [ # 0x5900 -> 0x593f + [ 0x593f, ['Han']], + ], + [ # 0x5940 -> 0x597f + [ 0x597f, ['Han']], + ], + [ # 0x5980 -> 0x59bf + [ 0x59bf, ['Han']], + ], + [ # 0x59c0 -> 0x59ff + [ 0x59ff, ['Han']], + ], + [ # 0x5a00 -> 0x5a3f + [ 0x5a3f, ['Han']], + ], + [ # 0x5a40 -> 0x5a7f + [ 0x5a7f, ['Han']], + ], + [ # 0x5a80 -> 0x5abf + [ 0x5abf, ['Han']], + ], + [ # 0x5ac0 -> 0x5aff + [ 0x5aff, ['Han']], + ], + [ # 0x5b00 -> 0x5b3f + [ 0x5b3f, ['Han']], + ], + [ # 0x5b40 -> 0x5b7f + [ 0x5b7f, ['Han']], + ], + [ # 0x5b80 -> 0x5bbf + [ 0x5bbf, ['Han']], + ], + [ # 0x5bc0 -> 0x5bff + [ 0x5bff, ['Han']], + ], + [ # 0x5c00 -> 0x5c3f + [ 0x5c3f, ['Han']], + ], + [ # 0x5c40 -> 0x5c7f + [ 0x5c7f, ['Han']], + ], + [ # 0x5c80 -> 0x5cbf + [ 0x5cbf, ['Han']], + ], + [ # 0x5cc0 -> 0x5cff + [ 0x5cff, ['Han']], + ], + [ # 0x5d00 -> 0x5d3f + [ 0x5d3f, ['Han']], + ], + [ # 0x5d40 -> 0x5d7f + [ 0x5d7f, ['Han']], + ], + [ # 0x5d80 -> 0x5dbf + [ 0x5dbf, ['Han']], + ], + [ # 0x5dc0 -> 0x5dff + [ 0x5dff, ['Han']], + ], + [ # 0x5e00 -> 0x5e3f + [ 0x5e3f, ['Han']], + ], + [ # 0x5e40 -> 0x5e7f + [ 0x5e7f, ['Han']], + ], + [ # 0x5e80 -> 0x5ebf + [ 0x5ebf, ['Han']], + ], + [ # 0x5ec0 -> 0x5eff + [ 0x5eff, ['Han']], + ], + [ # 0x5f00 -> 0x5f3f + [ 0x5f3f, ['Han']], + ], + [ # 0x5f40 -> 0x5f7f + [ 0x5f7f, ['Han']], + ], + [ # 0x5f80 -> 0x5fbf + [ 0x5fbf, ['Han']], + ], + [ # 0x5fc0 -> 0x5fff + [ 0x5fff, ['Han']], + ], + [ # 0x6000 -> 0x603f + [ 0x603f, ['Han']], + ], + [ # 0x6040 -> 0x607f + [ 0x607f, ['Han']], + ], + [ # 0x6080 -> 0x60bf + [ 0x60bf, ['Han']], + ], + [ # 0x60c0 -> 0x60ff + [ 0x60ff, ['Han']], + ], + [ # 0x6100 -> 0x613f + [ 0x613f, ['Han']], + ], + [ # 0x6140 -> 0x617f + [ 0x617f, ['Han']], + ], + [ # 0x6180 -> 0x61bf + [ 0x61bf, ['Han']], + ], + [ # 0x61c0 -> 0x61ff + [ 0x61ff, ['Han']], + ], + [ # 0x6200 -> 0x623f + [ 0x623f, ['Han']], + ], + [ # 0x6240 -> 0x627f + [ 0x627f, ['Han']], + ], + [ # 0x6280 -> 0x62bf + [ 0x62bf, ['Han']], + ], + [ # 0x62c0 -> 0x62ff + [ 0x62ff, ['Han']], + ], + [ # 0x6300 -> 0x633f + [ 0x633f, ['Han']], + ], + [ # 0x6340 -> 0x637f + [ 0x637f, ['Han']], + ], + [ # 0x6380 -> 0x63bf + [ 0x63bf, ['Han']], + ], + [ # 0x63c0 -> 0x63ff + [ 0x63ff, ['Han']], + ], + [ # 0x6400 -> 0x643f + [ 0x643f, ['Han']], + ], + [ # 0x6440 -> 0x647f + [ 0x647f, ['Han']], + ], + [ # 0x6480 -> 0x64bf + [ 0x64bf, ['Han']], + ], + [ # 0x64c0 -> 0x64ff + [ 0x64ff, ['Han']], + ], + [ # 0x6500 -> 0x653f + [ 0x653f, ['Han']], + ], + [ # 0x6540 -> 0x657f + [ 0x657f, ['Han']], + ], + [ # 0x6580 -> 0x65bf + [ 0x65bf, ['Han']], + ], + [ # 0x65c0 -> 0x65ff + [ 0x65ff, ['Han']], + ], + [ # 0x6600 -> 0x663f + [ 0x663f, ['Han']], + ], + [ # 0x6640 -> 0x667f + [ 0x667f, ['Han']], + ], + [ # 0x6680 -> 0x66bf + [ 0x66bf, ['Han']], + ], + [ # 0x66c0 -> 0x66ff + [ 0x66ff, ['Han']], + ], + [ # 0x6700 -> 0x673f + [ 0x673f, ['Han']], + ], + [ # 0x6740 -> 0x677f + [ 0x677f, ['Han']], + ], + [ # 0x6780 -> 0x67bf + [ 0x67bf, ['Han']], + ], + [ # 0x67c0 -> 0x67ff + [ 0x67ff, ['Han']], + ], + [ # 0x6800 -> 0x683f + [ 0x683f, ['Han']], + ], + [ # 0x6840 -> 0x687f + [ 0x687f, ['Han']], + ], + [ # 0x6880 -> 0x68bf + [ 0x68bf, ['Han']], + ], + [ # 0x68c0 -> 0x68ff + [ 0x68ff, ['Han']], + ], + [ # 0x6900 -> 0x693f + [ 0x693f, ['Han']], + ], + [ # 0x6940 -> 0x697f + [ 0x697f, ['Han']], + ], + [ # 0x6980 -> 0x69bf + [ 0x69bf, ['Han']], + ], + [ # 0x69c0 -> 0x69ff + [ 0x69ff, ['Han']], + ], + [ # 0x6a00 -> 0x6a3f + [ 0x6a3f, ['Han']], + ], + [ # 0x6a40 -> 0x6a7f + [ 0x6a7f, ['Han']], + ], + [ # 0x6a80 -> 0x6abf + [ 0x6abf, ['Han']], + ], + [ # 0x6ac0 -> 0x6aff + [ 0x6aff, ['Han']], + ], + [ # 0x6b00 -> 0x6b3f + [ 0x6b3f, ['Han']], + ], + [ # 0x6b40 -> 0x6b7f + [ 0x6b7f, ['Han']], + ], + [ # 0x6b80 -> 0x6bbf + [ 0x6bbf, ['Han']], + ], + [ # 0x6bc0 -> 0x6bff + [ 0x6bff, ['Han']], + ], + [ # 0x6c00 -> 0x6c3f + [ 0x6c3f, ['Han']], + ], + [ # 0x6c40 -> 0x6c7f + [ 0x6c7f, ['Han']], + ], + [ # 0x6c80 -> 0x6cbf + [ 0x6cbf, ['Han']], + ], + [ # 0x6cc0 -> 0x6cff + [ 0x6cff, ['Han']], + ], + [ # 0x6d00 -> 0x6d3f + [ 0x6d3f, ['Han']], + ], + [ # 0x6d40 -> 0x6d7f + [ 0x6d7f, ['Han']], + ], + [ # 0x6d80 -> 0x6dbf + [ 0x6dbf, ['Han']], + ], + [ # 0x6dc0 -> 0x6dff + [ 0x6dff, ['Han']], + ], + [ # 0x6e00 -> 0x6e3f + [ 0x6e3f, ['Han']], + ], + [ # 0x6e40 -> 0x6e7f + [ 0x6e7f, ['Han']], + ], + [ # 0x6e80 -> 0x6ebf + [ 0x6ebf, ['Han']], + ], + [ # 0x6ec0 -> 0x6eff + [ 0x6eff, ['Han']], + ], + [ # 0x6f00 -> 0x6f3f + [ 0x6f3f, ['Han']], + ], + [ # 0x6f40 -> 0x6f7f + [ 0x6f7f, ['Han']], + ], + [ # 0x6f80 -> 0x6fbf + [ 0x6fbf, ['Han']], + ], + [ # 0x6fc0 -> 0x6fff + [ 0x6fff, ['Han']], + ], + [ # 0x7000 -> 0x703f + [ 0x703f, ['Han']], + ], + [ # 0x7040 -> 0x707f + [ 0x707f, ['Han']], + ], + [ # 0x7080 -> 0x70bf + [ 0x70bf, ['Han']], + ], + [ # 0x70c0 -> 0x70ff + [ 0x70ff, ['Han']], + ], + [ # 0x7100 -> 0x713f + [ 0x713f, ['Han']], + ], + [ # 0x7140 -> 0x717f + [ 0x717f, ['Han']], + ], + [ # 0x7180 -> 0x71bf + [ 0x71bf, ['Han']], + ], + [ # 0x71c0 -> 0x71ff + [ 0x71ff, ['Han']], + ], + [ # 0x7200 -> 0x723f + [ 0x723f, ['Han']], + ], + [ # 0x7240 -> 0x727f + [ 0x727f, ['Han']], + ], + [ # 0x7280 -> 0x72bf + [ 0x72bf, ['Han']], + ], + [ # 0x72c0 -> 0x72ff + [ 0x72ff, ['Han']], + ], + [ # 0x7300 -> 0x733f + [ 0x733f, ['Han']], + ], + [ # 0x7340 -> 0x737f + [ 0x737f, ['Han']], + ], + [ # 0x7380 -> 0x73bf + [ 0x73bf, ['Han']], + ], + [ # 0x73c0 -> 0x73ff + [ 0x73ff, ['Han']], + ], + [ # 0x7400 -> 0x743f + [ 0x743f, ['Han']], + ], + [ # 0x7440 -> 0x747f + [ 0x747f, ['Han']], + ], + [ # 0x7480 -> 0x74bf + [ 0x74bf, ['Han']], + ], + [ # 0x74c0 -> 0x74ff + [ 0x74ff, ['Han']], + ], + [ # 0x7500 -> 0x753f + [ 0x753f, ['Han']], + ], + [ # 0x7540 -> 0x757f + [ 0x757f, ['Han']], + ], + [ # 0x7580 -> 0x75bf + [ 0x75bf, ['Han']], + ], + [ # 0x75c0 -> 0x75ff + [ 0x75ff, ['Han']], + ], + [ # 0x7600 -> 0x763f + [ 0x763f, ['Han']], + ], + [ # 0x7640 -> 0x767f + [ 0x767f, ['Han']], + ], + [ # 0x7680 -> 0x76bf + [ 0x76bf, ['Han']], + ], + [ # 0x76c0 -> 0x76ff + [ 0x76ff, ['Han']], + ], + [ # 0x7700 -> 0x773f + [ 0x773f, ['Han']], + ], + [ # 0x7740 -> 0x777f + [ 0x777f, ['Han']], + ], + [ # 0x7780 -> 0x77bf + [ 0x77bf, ['Han']], + ], + [ # 0x77c0 -> 0x77ff + [ 0x77ff, ['Han']], + ], + [ # 0x7800 -> 0x783f + [ 0x783f, ['Han']], + ], + [ # 0x7840 -> 0x787f + [ 0x787f, ['Han']], + ], + [ # 0x7880 -> 0x78bf + [ 0x78bf, ['Han']], + ], + [ # 0x78c0 -> 0x78ff + [ 0x78ff, ['Han']], + ], + [ # 0x7900 -> 0x793f + [ 0x793f, ['Han']], + ], + [ # 0x7940 -> 0x797f + [ 0x797f, ['Han']], + ], + [ # 0x7980 -> 0x79bf + [ 0x79bf, ['Han']], + ], + [ # 0x79c0 -> 0x79ff + [ 0x79ff, ['Han']], + ], + [ # 0x7a00 -> 0x7a3f + [ 0x7a3f, ['Han']], + ], + [ # 0x7a40 -> 0x7a7f + [ 0x7a7f, ['Han']], + ], + [ # 0x7a80 -> 0x7abf + [ 0x7abf, ['Han']], + ], + [ # 0x7ac0 -> 0x7aff + [ 0x7aff, ['Han']], + ], + [ # 0x7b00 -> 0x7b3f + [ 0x7b3f, ['Han']], + ], + [ # 0x7b40 -> 0x7b7f + [ 0x7b7f, ['Han']], + ], + [ # 0x7b80 -> 0x7bbf + [ 0x7bbf, ['Han']], + ], + [ # 0x7bc0 -> 0x7bff + [ 0x7bff, ['Han']], + ], + [ # 0x7c00 -> 0x7c3f + [ 0x7c3f, ['Han']], + ], + [ # 0x7c40 -> 0x7c7f + [ 0x7c7f, ['Han']], + ], + [ # 0x7c80 -> 0x7cbf + [ 0x7cbf, ['Han']], + ], + [ # 0x7cc0 -> 0x7cff + [ 0x7cff, ['Han']], + ], + [ # 0x7d00 -> 0x7d3f + [ 0x7d3f, ['Han']], + ], + [ # 0x7d40 -> 0x7d7f + [ 0x7d7f, ['Han']], + ], + [ # 0x7d80 -> 0x7dbf + [ 0x7dbf, ['Han']], + ], + [ # 0x7dc0 -> 0x7dff + [ 0x7dff, ['Han']], + ], + [ # 0x7e00 -> 0x7e3f + [ 0x7e3f, ['Han']], + ], + [ # 0x7e40 -> 0x7e7f + [ 0x7e7f, ['Han']], + ], + [ # 0x7e80 -> 0x7ebf + [ 0x7ebf, ['Han']], + ], + [ # 0x7ec0 -> 0x7eff + [ 0x7eff, ['Han']], + ], + [ # 0x7f00 -> 0x7f3f + [ 0x7f3f, ['Han']], + ], + [ # 0x7f40 -> 0x7f7f + [ 0x7f7f, ['Han']], + ], + [ # 0x7f80 -> 0x7fbf + [ 0x7fbf, ['Han']], + ], + [ # 0x7fc0 -> 0x7fff + [ 0x7fff, ['Han']], + ], + [ # 0x8000 -> 0x803f + [ 0x803f, ['Han']], + ], + [ # 0x8040 -> 0x807f + [ 0x807f, ['Han']], + ], + [ # 0x8080 -> 0x80bf + [ 0x80bf, ['Han']], + ], + [ # 0x80c0 -> 0x80ff + [ 0x80ff, ['Han']], + ], + [ # 0x8100 -> 0x813f + [ 0x813f, ['Han']], + ], + [ # 0x8140 -> 0x817f + [ 0x817f, ['Han']], + ], + [ # 0x8180 -> 0x81bf + [ 0x81bf, ['Han']], + ], + [ # 0x81c0 -> 0x81ff + [ 0x81ff, ['Han']], + ], + [ # 0x8200 -> 0x823f + [ 0x823f, ['Han']], + ], + [ # 0x8240 -> 0x827f + [ 0x827f, ['Han']], + ], + [ # 0x8280 -> 0x82bf + [ 0x82bf, ['Han']], + ], + [ # 0x82c0 -> 0x82ff + [ 0x82ff, ['Han']], + ], + [ # 0x8300 -> 0x833f + [ 0x833f, ['Han']], + ], + [ # 0x8340 -> 0x837f + [ 0x837f, ['Han']], + ], + [ # 0x8380 -> 0x83bf + [ 0x83bf, ['Han']], + ], + [ # 0x83c0 -> 0x83ff + [ 0x83ff, ['Han']], + ], + [ # 0x8400 -> 0x843f + [ 0x843f, ['Han']], + ], + [ # 0x8440 -> 0x847f + [ 0x847f, ['Han']], + ], + [ # 0x8480 -> 0x84bf + [ 0x84bf, ['Han']], + ], + [ # 0x84c0 -> 0x84ff + [ 0x84ff, ['Han']], + ], + [ # 0x8500 -> 0x853f + [ 0x853f, ['Han']], + ], + [ # 0x8540 -> 0x857f + [ 0x857f, ['Han']], + ], + [ # 0x8580 -> 0x85bf + [ 0x85bf, ['Han']], + ], + [ # 0x85c0 -> 0x85ff + [ 0x85ff, ['Han']], + ], + [ # 0x8600 -> 0x863f + [ 0x863f, ['Han']], + ], + [ # 0x8640 -> 0x867f + [ 0x867f, ['Han']], + ], + [ # 0x8680 -> 0x86bf + [ 0x86bf, ['Han']], + ], + [ # 0x86c0 -> 0x86ff + [ 0x86ff, ['Han']], + ], + [ # 0x8700 -> 0x873f + [ 0x873f, ['Han']], + ], + [ # 0x8740 -> 0x877f + [ 0x877f, ['Han']], + ], + [ # 0x8780 -> 0x87bf + [ 0x87bf, ['Han']], + ], + [ # 0x87c0 -> 0x87ff + [ 0x87ff, ['Han']], + ], + [ # 0x8800 -> 0x883f + [ 0x883f, ['Han']], + ], + [ # 0x8840 -> 0x887f + [ 0x887f, ['Han']], + ], + [ # 0x8880 -> 0x88bf + [ 0x88bf, ['Han']], + ], + [ # 0x88c0 -> 0x88ff + [ 0x88ff, ['Han']], + ], + [ # 0x8900 -> 0x893f + [ 0x893f, ['Han']], + ], + [ # 0x8940 -> 0x897f + [ 0x897f, ['Han']], + ], + [ # 0x8980 -> 0x89bf + [ 0x89bf, ['Han']], + ], + [ # 0x89c0 -> 0x89ff + [ 0x89ff, ['Han']], + ], + [ # 0x8a00 -> 0x8a3f + [ 0x8a3f, ['Han']], + ], + [ # 0x8a40 -> 0x8a7f + [ 0x8a7f, ['Han']], + ], + [ # 0x8a80 -> 0x8abf + [ 0x8abf, ['Han']], + ], + [ # 0x8ac0 -> 0x8aff + [ 0x8aff, ['Han']], + ], + [ # 0x8b00 -> 0x8b3f + [ 0x8b3f, ['Han']], + ], + [ # 0x8b40 -> 0x8b7f + [ 0x8b7f, ['Han']], + ], + [ # 0x8b80 -> 0x8bbf + [ 0x8bbf, ['Han']], + ], + [ # 0x8bc0 -> 0x8bff + [ 0x8bff, ['Han']], + ], + [ # 0x8c00 -> 0x8c3f + [ 0x8c3f, ['Han']], + ], + [ # 0x8c40 -> 0x8c7f + [ 0x8c7f, ['Han']], + ], + [ # 0x8c80 -> 0x8cbf + [ 0x8cbf, ['Han']], + ], + [ # 0x8cc0 -> 0x8cff + [ 0x8cff, ['Han']], + ], + [ # 0x8d00 -> 0x8d3f + [ 0x8d3f, ['Han']], + ], + [ # 0x8d40 -> 0x8d7f + [ 0x8d7f, ['Han']], + ], + [ # 0x8d80 -> 0x8dbf + [ 0x8dbf, ['Han']], + ], + [ # 0x8dc0 -> 0x8dff + [ 0x8dff, ['Han']], + ], + [ # 0x8e00 -> 0x8e3f + [ 0x8e3f, ['Han']], + ], + [ # 0x8e40 -> 0x8e7f + [ 0x8e7f, ['Han']], + ], + [ # 0x8e80 -> 0x8ebf + [ 0x8ebf, ['Han']], + ], + [ # 0x8ec0 -> 0x8eff + [ 0x8eff, ['Han']], + ], + [ # 0x8f00 -> 0x8f3f + [ 0x8f3f, ['Han']], + ], + [ # 0x8f40 -> 0x8f7f + [ 0x8f7f, ['Han']], + ], + [ # 0x8f80 -> 0x8fbf + [ 0x8fbf, ['Han']], + ], + [ # 0x8fc0 -> 0x8fff + [ 0x8fff, ['Han']], + ], + [ # 0x9000 -> 0x903f + [ 0x903f, ['Han']], + ], + [ # 0x9040 -> 0x907f + [ 0x907f, ['Han']], + ], + [ # 0x9080 -> 0x90bf + [ 0x90bf, ['Han']], + ], + [ # 0x90c0 -> 0x90ff + [ 0x90ff, ['Han']], + ], + [ # 0x9100 -> 0x913f + [ 0x913f, ['Han']], + ], + [ # 0x9140 -> 0x917f + [ 0x917f, ['Han']], + ], + [ # 0x9180 -> 0x91bf + [ 0x91bf, ['Han']], + ], + [ # 0x91c0 -> 0x91ff + [ 0x91ff, ['Han']], + ], + [ # 0x9200 -> 0x923f + [ 0x923f, ['Han']], + ], + [ # 0x9240 -> 0x927f + [ 0x927f, ['Han']], + ], + [ # 0x9280 -> 0x92bf + [ 0x92bf, ['Han']], + ], + [ # 0x92c0 -> 0x92ff + [ 0x92ff, ['Han']], + ], + [ # 0x9300 -> 0x933f + [ 0x933f, ['Han']], + ], + [ # 0x9340 -> 0x937f + [ 0x937f, ['Han']], + ], + [ # 0x9380 -> 0x93bf + [ 0x93bf, ['Han']], + ], + [ # 0x93c0 -> 0x93ff + [ 0x93ff, ['Han']], + ], + [ # 0x9400 -> 0x943f + [ 0x943f, ['Han']], + ], + [ # 0x9440 -> 0x947f + [ 0x947f, ['Han']], + ], + [ # 0x9480 -> 0x94bf + [ 0x94bf, ['Han']], + ], + [ # 0x94c0 -> 0x94ff + [ 0x94ff, ['Han']], + ], + [ # 0x9500 -> 0x953f + [ 0x953f, ['Han']], + ], + [ # 0x9540 -> 0x957f + [ 0x957f, ['Han']], + ], + [ # 0x9580 -> 0x95bf + [ 0x95bf, ['Han']], + ], + [ # 0x95c0 -> 0x95ff + [ 0x95ff, ['Han']], + ], + [ # 0x9600 -> 0x963f + [ 0x963f, ['Han']], + ], + [ # 0x9640 -> 0x967f + [ 0x967f, ['Han']], + ], + [ # 0x9680 -> 0x96bf + [ 0x96bf, ['Han']], + ], + [ # 0x96c0 -> 0x96ff + [ 0x96ff, ['Han']], + ], + [ # 0x9700 -> 0x973f + [ 0x973f, ['Han']], + ], + [ # 0x9740 -> 0x977f + [ 0x977f, ['Han']], + ], + [ # 0x9780 -> 0x97bf + [ 0x97bf, ['Han']], + ], + [ # 0x97c0 -> 0x97ff + [ 0x97ff, ['Han']], + ], + [ # 0x9800 -> 0x983f + [ 0x983f, ['Han']], + ], + [ # 0x9840 -> 0x987f + [ 0x987f, ['Han']], + ], + [ # 0x9880 -> 0x98bf + [ 0x98bf, ['Han']], + ], + [ # 0x98c0 -> 0x98ff + [ 0x98ff, ['Han']], + ], + [ # 0x9900 -> 0x993f + [ 0x993f, ['Han']], + ], + [ # 0x9940 -> 0x997f + [ 0x997f, ['Han']], + ], + [ # 0x9980 -> 0x99bf + [ 0x99bf, ['Han']], + ], + [ # 0x99c0 -> 0x99ff + [ 0x99ff, ['Han']], + ], + [ # 0x9a00 -> 0x9a3f + [ 0x9a3f, ['Han']], + ], + [ # 0x9a40 -> 0x9a7f + [ 0x9a7f, ['Han']], + ], + [ # 0x9a80 -> 0x9abf + [ 0x9abf, ['Han']], + ], + [ # 0x9ac0 -> 0x9aff + [ 0x9aff, ['Han']], + ], + [ # 0x9b00 -> 0x9b3f + [ 0x9b3f, ['Han']], + ], + [ # 0x9b40 -> 0x9b7f + [ 0x9b7f, ['Han']], + ], + [ # 0x9b80 -> 0x9bbf + [ 0x9bbf, ['Han']], + ], + [ # 0x9bc0 -> 0x9bff + [ 0x9bff, ['Han']], + ], + [ # 0x9c00 -> 0x9c3f + [ 0x9c3f, ['Han']], + ], + [ # 0x9c40 -> 0x9c7f + [ 0x9c7f, ['Han']], + ], + [ # 0x9c80 -> 0x9cbf + [ 0x9cbf, ['Han']], + ], + [ # 0x9cc0 -> 0x9cff + [ 0x9cff, ['Han']], + ], + [ # 0x9d00 -> 0x9d3f + [ 0x9d3f, ['Han']], + ], + [ # 0x9d40 -> 0x9d7f + [ 0x9d7f, ['Han']], + ], + [ # 0x9d80 -> 0x9dbf + [ 0x9dbf, ['Han']], + ], + [ # 0x9dc0 -> 0x9dff + [ 0x9dff, ['Han']], + ], + [ # 0x9e00 -> 0x9e3f + [ 0x9e3f, ['Han']], + ], + [ # 0x9e40 -> 0x9e7f + [ 0x9e7f, ['Han']], + ], + [ # 0x9e80 -> 0x9ebf + [ 0x9ebf, ['Han']], + ], + [ # 0x9ec0 -> 0x9eff + [ 0x9eff, ['Han']], + ], + [ # 0x9f00 -> 0x9f3f + [ 0x9f3f, ['Han']], + ], + [ # 0x9f40 -> 0x9f7f + [ 0x9f7f, ['Han']], + ], + [ # 0x9f80 -> 0x9fbf + [ 0x9fbf, ['Han']], + ], + [ # 0x9fc0 -> 0x9fff + [ 0x9fff, ['Han']], + ], + [ # 0xa000 -> 0xa03f + [ 0xa03f, ['Yi']], + ], + [ # 0xa040 -> 0xa07f + [ 0xa07f, ['Yi']], + ], + [ # 0xa080 -> 0xa0bf + [ 0xa0bf, ['Yi']], + ], + [ # 0xa0c0 -> 0xa0ff + [ 0xa0ff, ['Yi']], + ], + [ # 0xa100 -> 0xa13f + [ 0xa13f, ['Yi']], + ], + [ # 0xa140 -> 0xa17f + [ 0xa17f, ['Yi']], + ], + [ # 0xa180 -> 0xa1bf + [ 0xa1bf, ['Yi']], + ], + [ # 0xa1c0 -> 0xa1ff + [ 0xa1ff, ['Yi']], + ], + [ # 0xa200 -> 0xa23f + [ 0xa23f, ['Yi']], + ], + [ # 0xa240 -> 0xa27f + [ 0xa27f, ['Yi']], + ], + [ # 0xa280 -> 0xa2bf + [ 0xa2bf, ['Yi']], + ], + [ # 0xa2c0 -> 0xa2ff + [ 0xa2ff, ['Yi']], + ], + [ # 0xa300 -> 0xa33f + [ 0xa33f, ['Yi']], + ], + [ # 0xa340 -> 0xa37f + [ 0xa37f, ['Yi']], + ], + [ # 0xa380 -> 0xa3bf + [ 0xa3bf, ['Yi']], + ], + [ # 0xa3c0 -> 0xa3ff + [ 0xa3ff, ['Yi']], + ], + [ # 0xa400 -> 0xa43f + [ 0xa43f, ['Yi']], + ], + [ # 0xa440 -> 0xa47f + [ 0xa47f, ['Yi']], + ], + [ # 0xa480 -> 0xa4bf + [ 0xa48c, ['Yi']], + [ 0xa48f, ['Unknown']], + [ 0xa4bf, ['Yi']], + ], + [ # 0xa4c0 -> 0xa4ff + [ 0xa4c6, ['Yi']], + [ 0xa4cf, ['Unknown']], + [ 0xa4ff, ['Lisu']], + ], + [ # 0xa500 -> 0xa53f + [ 0xa53f, ['Vai']], + ], + [ # 0xa540 -> 0xa57f + [ 0xa57f, ['Vai']], + ], + [ # 0xa580 -> 0xa5bf + [ 0xa5bf, ['Vai']], + ], + [ # 0xa5c0 -> 0xa5ff + [ 0xa5ff, ['Vai']], + ], + [ # 0xa600 -> 0xa63f + [ 0xa62b, ['Vai']], + [ 0xa63f, ['Unknown']], + ], + [ # 0xa640 -> 0xa67f + [ 0xa66e, ['Cyrillic']], + [ 0xa670, ['Cyrillic', 'Glagolitic']], + [ 0xa67f, ['Cyrillic']], + ], + [ # 0xa680 -> 0xa6bf + [ 0xa69f, ['Cyrillic']], + [ 0xa6bf, ['Bamum']], + ], + [ # 0xa6c0 -> 0xa6ff + [ 0xa6f7, ['Bamum']], + [ 0xa6ff, ['Unknown']], + ], + [ # 0xa700 -> 0xa73f + [ 0xa707, ['Common', 'Han', 'Latin']], + [ 0xa721, ['Common']], + [ 0xa73f, ['Latin']], + ], + [ # 0xa740 -> 0xa77f + [ 0xa77f, ['Latin']], + ], + [ # 0xa780 -> 0xa7bf + [ 0xa787, ['Latin']], + [ 0xa78a, ['Common']], + [ 0xa7bf, ['Latin']], + ], + [ # 0xa7c0 -> 0xa7ff + [ 0xa7ca, ['Latin']], + [ 0xa7cf, ['Unknown']], + [ 0xa7d1, ['Latin']], + [ 0xa7d2, ['Unknown']], + [ 0xa7d9, ['Latin']], + [ 0xa7f1, ['Unknown']], + [ 0xa7ff, ['Latin']], + ], + [ # 0xa800 -> 0xa83f + [ 0xa82d, ['Syloti_Nagri']], + [ 0xa82f, ['Unknown']], + [ 0xa832, ['Common', 'Devanagari', 'Dogra', 'Gujarati', 'Gurmukhi', 'Kaithi', 'Kannada', 'Khojki', 'Khudawadi', 'Mahajani', 'Malayalam', 'Modi', 'Nandinagari', 'Sharada', 'Takri', 'Tirhuta']], + [ 0xa835, ['Common', 'Devanagari', 'Dogra', 'Gujarati', 'Gurmukhi', 'Kaithi', 'Kannada', 'Khojki', 'Khudawadi', 'Mahajani', 'Modi', 'Nandinagari', 'Sharada', 'Takri', 'Tirhuta']], + [ 0xa837, ['Common', 'Devanagari', 'Dogra', 'Gujarati', 'Gurmukhi', 'Kaithi', 'Khojki', 'Khudawadi', 'Mahajani', 'Modi', 'Takri', 'Tirhuta']], + [ 0xa839, ['Common', 'Devanagari', 'Dogra', 'Gujarati', 'Gurmukhi', 'Kaithi', 'Khojki', 'Khudawadi', 'Mahajani', 'Modi', 'Sharada', 'Takri', 'Tirhuta']], + [ 0xa83a, ['Common', 'Devanagari', 'Dogra', 'Gujarati', 'Gurmukhi', 'Kaithi', 'Khojki', 'Khudawadi', 'Mahajani', 'Modi', 'Takri', 'Tirhuta']], + [ 0xa83f, ['Unknown']], + ], + [ # 0xa840 -> 0xa87f + [ 0xa877, ['Phags_Pa']], + [ 0xa87f, ['Unknown']], + ], + [ # 0xa880 -> 0xa8bf + [ 0xa8bf, ['Saurashtra']], + ], + [ # 0xa8c0 -> 0xa8ff + [ 0xa8c5, ['Saurashtra']], + [ 0xa8cd, ['Unknown']], + [ 0xa8d9, ['Saurashtra']], + [ 0xa8df, ['Unknown']], + [ 0xa8f0, ['Devanagari']], + [ 0xa8f2, ['Bengali', 'Devanagari']], + [ 0xa8f4, ['Devanagari', 'Tamil']], + [ 0xa8ff, ['Devanagari']], + ], + [ # 0xa900 -> 0xa93f + [ 0xa900, ['Devanagari', 'Kayah_Li']], + [ 0xa92d, ['Kayah_Li']], + [ 0xa92f, ['Common', 'Kayah_Li', 'Latin', 'Myanmar']], + [ 0xa930, ['Kayah_Li', 'Rejang']], + [ 0xa93f, ['Rejang']], + ], + [ # 0xa940 -> 0xa97f + [ 0xa953, ['Rejang']], + [ 0xa95e, ['Unknown']], + [ 0xa95f, ['Rejang']], + [ 0xa960, ['Hangul', 'Rejang']], + [ 0xa97c, ['Hangul']], + [ 0xa97f, ['Unknown']], + ], + [ # 0xa980 -> 0xa9bf + [ 0xa9bf, ['Javanese']], + ], + [ # 0xa9c0 -> 0xa9ff + [ 0xa9cd, ['Javanese']], + [ 0xa9ce, ['Unknown']], + [ 0xa9d0, ['Buginese', 'Common', 'Javanese']], + [ 0xa9d9, ['Javanese']], + [ 0xa9dd, ['Unknown']], + [ 0xa9df, ['Javanese']], + [ 0xa9fe, ['Myanmar']], + [ 0xa9ff, ['Unknown']], + ], + [ # 0xaa00 -> 0xaa3f + [ 0xaa36, ['Cham']], + [ 0xaa3f, ['Unknown']], + ], + [ # 0xaa40 -> 0xaa7f + [ 0xaa4e, ['Cham']], + [ 0xaa4f, ['Unknown']], + [ 0xaa59, ['Cham']], + [ 0xaa5b, ['Unknown']], + [ 0xaa5f, ['Cham']], + [ 0xaa7f, ['Myanmar']], + ], + [ # 0xaa80 -> 0xaabf + [ 0xaabf, ['Tai_Viet']], + ], + [ # 0xaac0 -> 0xaaff + [ 0xaac3, ['Tai_Viet']], + [ 0xaada, ['Unknown']], + [ 0xaadf, ['Tai_Viet']], + [ 0xaaf7, ['Meetei_Mayek']], + [ 0xaaff, ['Unknown']], + ], + [ # 0xab00 -> 0xab3f + [ 0xab00, ['Unknown']], + [ 0xab06, ['Ethiopic']], + [ 0xab08, ['Unknown']], + [ 0xab0e, ['Ethiopic']], + [ 0xab10, ['Unknown']], + [ 0xab16, ['Ethiopic']], + [ 0xab1f, ['Unknown']], + [ 0xab26, ['Ethiopic']], + [ 0xab27, ['Unknown']], + [ 0xab2e, ['Ethiopic']], + [ 0xab2f, ['Unknown']], + [ 0xab3f, ['Latin']], + ], + [ # 0xab40 -> 0xab7f + [ 0xab5a, ['Latin']], + [ 0xab5b, ['Common']], + [ 0xab5c, ['Common', 'Latin']], + [ 0xab64, ['Latin']], + [ 0xab65, ['Greek']], + [ 0xab66, ['Greek', 'Latin']], + [ 0xab69, ['Latin']], + [ 0xab6a, ['Common', 'Latin']], + [ 0xab6b, ['Common']], + [ 0xab6f, ['Unknown']], + [ 0xab7f, ['Cherokee']], + ], + [ # 0xab80 -> 0xabbf + [ 0xabbf, ['Cherokee']], + ], + [ # 0xabc0 -> 0xabff + [ 0xabee, ['Meetei_Mayek']], + [ 0xabef, ['Unknown']], + [ 0xabf9, ['Meetei_Mayek']], + [ 0xabff, ['Unknown']], + ], + [ # 0xac00 -> 0xac3f + [ 0xac3f, ['Hangul']], + ], + [ # 0xac40 -> 0xac7f + [ 0xac7f, ['Hangul']], + ], + [ # 0xac80 -> 0xacbf + [ 0xacbf, ['Hangul']], + ], + [ # 0xacc0 -> 0xacff + [ 0xacff, ['Hangul']], + ], + [ # 0xad00 -> 0xad3f + [ 0xad3f, ['Hangul']], + ], + [ # 0xad40 -> 0xad7f + [ 0xad7f, ['Hangul']], + ], + [ # 0xad80 -> 0xadbf + [ 0xadbf, ['Hangul']], + ], + [ # 0xadc0 -> 0xadff + [ 0xadff, ['Hangul']], + ], + [ # 0xae00 -> 0xae3f + [ 0xae3f, ['Hangul']], + ], + [ # 0xae40 -> 0xae7f + [ 0xae7f, ['Hangul']], + ], + [ # 0xae80 -> 0xaebf + [ 0xaebf, ['Hangul']], + ], + [ # 0xaec0 -> 0xaeff + [ 0xaeff, ['Hangul']], + ], + [ # 0xaf00 -> 0xaf3f + [ 0xaf3f, ['Hangul']], + ], + [ # 0xaf40 -> 0xaf7f + [ 0xaf7f, ['Hangul']], + ], + [ # 0xaf80 -> 0xafbf + [ 0xafbf, ['Hangul']], + ], + [ # 0xafc0 -> 0xafff + [ 0xafff, ['Hangul']], + ], + [ # 0xb000 -> 0xb03f + [ 0xb03f, ['Hangul']], + ], + [ # 0xb040 -> 0xb07f + [ 0xb07f, ['Hangul']], + ], + [ # 0xb080 -> 0xb0bf + [ 0xb0bf, ['Hangul']], + ], + [ # 0xb0c0 -> 0xb0ff + [ 0xb0ff, ['Hangul']], + ], + [ # 0xb100 -> 0xb13f + [ 0xb13f, ['Hangul']], + ], + [ # 0xb140 -> 0xb17f + [ 0xb17f, ['Hangul']], + ], + [ # 0xb180 -> 0xb1bf + [ 0xb1bf, ['Hangul']], + ], + [ # 0xb1c0 -> 0xb1ff + [ 0xb1ff, ['Hangul']], + ], + [ # 0xb200 -> 0xb23f + [ 0xb23f, ['Hangul']], + ], + [ # 0xb240 -> 0xb27f + [ 0xb27f, ['Hangul']], + ], + [ # 0xb280 -> 0xb2bf + [ 0xb2bf, ['Hangul']], + ], + [ # 0xb2c0 -> 0xb2ff + [ 0xb2ff, ['Hangul']], + ], + [ # 0xb300 -> 0xb33f + [ 0xb33f, ['Hangul']], + ], + [ # 0xb340 -> 0xb37f + [ 0xb37f, ['Hangul']], + ], + [ # 0xb380 -> 0xb3bf + [ 0xb3bf, ['Hangul']], + ], + [ # 0xb3c0 -> 0xb3ff + [ 0xb3ff, ['Hangul']], + ], + [ # 0xb400 -> 0xb43f + [ 0xb43f, ['Hangul']], + ], + [ # 0xb440 -> 0xb47f + [ 0xb47f, ['Hangul']], + ], + [ # 0xb480 -> 0xb4bf + [ 0xb4bf, ['Hangul']], + ], + [ # 0xb4c0 -> 0xb4ff + [ 0xb4ff, ['Hangul']], + ], + [ # 0xb500 -> 0xb53f + [ 0xb53f, ['Hangul']], + ], + [ # 0xb540 -> 0xb57f + [ 0xb57f, ['Hangul']], + ], + [ # 0xb580 -> 0xb5bf + [ 0xb5bf, ['Hangul']], + ], + [ # 0xb5c0 -> 0xb5ff + [ 0xb5ff, ['Hangul']], + ], + [ # 0xb600 -> 0xb63f + [ 0xb63f, ['Hangul']], + ], + [ # 0xb640 -> 0xb67f + [ 0xb67f, ['Hangul']], + ], + [ # 0xb680 -> 0xb6bf + [ 0xb6bf, ['Hangul']], + ], + [ # 0xb6c0 -> 0xb6ff + [ 0xb6ff, ['Hangul']], + ], + [ # 0xb700 -> 0xb73f + [ 0xb73f, ['Hangul']], + ], + [ # 0xb740 -> 0xb77f + [ 0xb77f, ['Hangul']], + ], + [ # 0xb780 -> 0xb7bf + [ 0xb7bf, ['Hangul']], + ], + [ # 0xb7c0 -> 0xb7ff + [ 0xb7ff, ['Hangul']], + ], + [ # 0xb800 -> 0xb83f + [ 0xb83f, ['Hangul']], + ], + [ # 0xb840 -> 0xb87f + [ 0xb87f, ['Hangul']], + ], + [ # 0xb880 -> 0xb8bf + [ 0xb8bf, ['Hangul']], + ], + [ # 0xb8c0 -> 0xb8ff + [ 0xb8ff, ['Hangul']], + ], + [ # 0xb900 -> 0xb93f + [ 0xb93f, ['Hangul']], + ], + [ # 0xb940 -> 0xb97f + [ 0xb97f, ['Hangul']], + ], + [ # 0xb980 -> 0xb9bf + [ 0xb9bf, ['Hangul']], + ], + [ # 0xb9c0 -> 0xb9ff + [ 0xb9ff, ['Hangul']], + ], + [ # 0xba00 -> 0xba3f + [ 0xba3f, ['Hangul']], + ], + [ # 0xba40 -> 0xba7f + [ 0xba7f, ['Hangul']], + ], + [ # 0xba80 -> 0xbabf + [ 0xbabf, ['Hangul']], + ], + [ # 0xbac0 -> 0xbaff + [ 0xbaff, ['Hangul']], + ], + [ # 0xbb00 -> 0xbb3f + [ 0xbb3f, ['Hangul']], + ], + [ # 0xbb40 -> 0xbb7f + [ 0xbb7f, ['Hangul']], + ], + [ # 0xbb80 -> 0xbbbf + [ 0xbbbf, ['Hangul']], + ], + [ # 0xbbc0 -> 0xbbff + [ 0xbbff, ['Hangul']], + ], + [ # 0xbc00 -> 0xbc3f + [ 0xbc3f, ['Hangul']], + ], + [ # 0xbc40 -> 0xbc7f + [ 0xbc7f, ['Hangul']], + ], + [ # 0xbc80 -> 0xbcbf + [ 0xbcbf, ['Hangul']], + ], + [ # 0xbcc0 -> 0xbcff + [ 0xbcff, ['Hangul']], + ], + [ # 0xbd00 -> 0xbd3f + [ 0xbd3f, ['Hangul']], + ], + [ # 0xbd40 -> 0xbd7f + [ 0xbd7f, ['Hangul']], + ], + [ # 0xbd80 -> 0xbdbf + [ 0xbdbf, ['Hangul']], + ], + [ # 0xbdc0 -> 0xbdff + [ 0xbdff, ['Hangul']], + ], + [ # 0xbe00 -> 0xbe3f + [ 0xbe3f, ['Hangul']], + ], + [ # 0xbe40 -> 0xbe7f + [ 0xbe7f, ['Hangul']], + ], + [ # 0xbe80 -> 0xbebf + [ 0xbebf, ['Hangul']], + ], + [ # 0xbec0 -> 0xbeff + [ 0xbeff, ['Hangul']], + ], + [ # 0xbf00 -> 0xbf3f + [ 0xbf3f, ['Hangul']], + ], + [ # 0xbf40 -> 0xbf7f + [ 0xbf7f, ['Hangul']], + ], + [ # 0xbf80 -> 0xbfbf + [ 0xbfbf, ['Hangul']], + ], + [ # 0xbfc0 -> 0xbfff + [ 0xbfff, ['Hangul']], + ], + [ # 0xc000 -> 0xc03f + [ 0xc03f, ['Hangul']], + ], + [ # 0xc040 -> 0xc07f + [ 0xc07f, ['Hangul']], + ], + [ # 0xc080 -> 0xc0bf + [ 0xc0bf, ['Hangul']], + ], + [ # 0xc0c0 -> 0xc0ff + [ 0xc0ff, ['Hangul']], + ], + [ # 0xc100 -> 0xc13f + [ 0xc13f, ['Hangul']], + ], + [ # 0xc140 -> 0xc17f + [ 0xc17f, ['Hangul']], + ], + [ # 0xc180 -> 0xc1bf + [ 0xc1bf, ['Hangul']], + ], + [ # 0xc1c0 -> 0xc1ff + [ 0xc1ff, ['Hangul']], + ], + [ # 0xc200 -> 0xc23f + [ 0xc23f, ['Hangul']], + ], + [ # 0xc240 -> 0xc27f + [ 0xc27f, ['Hangul']], + ], + [ # 0xc280 -> 0xc2bf + [ 0xc2bf, ['Hangul']], + ], + [ # 0xc2c0 -> 0xc2ff + [ 0xc2ff, ['Hangul']], + ], + [ # 0xc300 -> 0xc33f + [ 0xc33f, ['Hangul']], + ], + [ # 0xc340 -> 0xc37f + [ 0xc37f, ['Hangul']], + ], + [ # 0xc380 -> 0xc3bf + [ 0xc3bf, ['Hangul']], + ], + [ # 0xc3c0 -> 0xc3ff + [ 0xc3ff, ['Hangul']], + ], + [ # 0xc400 -> 0xc43f + [ 0xc43f, ['Hangul']], + ], + [ # 0xc440 -> 0xc47f + [ 0xc47f, ['Hangul']], + ], + [ # 0xc480 -> 0xc4bf + [ 0xc4bf, ['Hangul']], + ], + [ # 0xc4c0 -> 0xc4ff + [ 0xc4ff, ['Hangul']], + ], + [ # 0xc500 -> 0xc53f + [ 0xc53f, ['Hangul']], + ], + [ # 0xc540 -> 0xc57f + [ 0xc57f, ['Hangul']], + ], + [ # 0xc580 -> 0xc5bf + [ 0xc5bf, ['Hangul']], + ], + [ # 0xc5c0 -> 0xc5ff + [ 0xc5ff, ['Hangul']], + ], + [ # 0xc600 -> 0xc63f + [ 0xc63f, ['Hangul']], + ], + [ # 0xc640 -> 0xc67f + [ 0xc67f, ['Hangul']], + ], + [ # 0xc680 -> 0xc6bf + [ 0xc6bf, ['Hangul']], + ], + [ # 0xc6c0 -> 0xc6ff + [ 0xc6ff, ['Hangul']], + ], + [ # 0xc700 -> 0xc73f + [ 0xc73f, ['Hangul']], + ], + [ # 0xc740 -> 0xc77f + [ 0xc77f, ['Hangul']], + ], + [ # 0xc780 -> 0xc7bf + [ 0xc7bf, ['Hangul']], + ], + [ # 0xc7c0 -> 0xc7ff + [ 0xc7ff, ['Hangul']], + ], + [ # 0xc800 -> 0xc83f + [ 0xc83f, ['Hangul']], + ], + [ # 0xc840 -> 0xc87f + [ 0xc87f, ['Hangul']], + ], + [ # 0xc880 -> 0xc8bf + [ 0xc8bf, ['Hangul']], + ], + [ # 0xc8c0 -> 0xc8ff + [ 0xc8ff, ['Hangul']], + ], + [ # 0xc900 -> 0xc93f + [ 0xc93f, ['Hangul']], + ], + [ # 0xc940 -> 0xc97f + [ 0xc97f, ['Hangul']], + ], + [ # 0xc980 -> 0xc9bf + [ 0xc9bf, ['Hangul']], + ], + [ # 0xc9c0 -> 0xc9ff + [ 0xc9ff, ['Hangul']], + ], + [ # 0xca00 -> 0xca3f + [ 0xca3f, ['Hangul']], + ], + [ # 0xca40 -> 0xca7f + [ 0xca7f, ['Hangul']], + ], + [ # 0xca80 -> 0xcabf + [ 0xcabf, ['Hangul']], + ], + [ # 0xcac0 -> 0xcaff + [ 0xcaff, ['Hangul']], + ], + [ # 0xcb00 -> 0xcb3f + [ 0xcb3f, ['Hangul']], + ], + [ # 0xcb40 -> 0xcb7f + [ 0xcb7f, ['Hangul']], + ], + [ # 0xcb80 -> 0xcbbf + [ 0xcbbf, ['Hangul']], + ], + [ # 0xcbc0 -> 0xcbff + [ 0xcbff, ['Hangul']], + ], + [ # 0xcc00 -> 0xcc3f + [ 0xcc3f, ['Hangul']], + ], + [ # 0xcc40 -> 0xcc7f + [ 0xcc7f, ['Hangul']], + ], + [ # 0xcc80 -> 0xccbf + [ 0xccbf, ['Hangul']], + ], + [ # 0xccc0 -> 0xccff + [ 0xccff, ['Hangul']], + ], + [ # 0xcd00 -> 0xcd3f + [ 0xcd3f, ['Hangul']], + ], + [ # 0xcd40 -> 0xcd7f + [ 0xcd7f, ['Hangul']], + ], + [ # 0xcd80 -> 0xcdbf + [ 0xcdbf, ['Hangul']], + ], + [ # 0xcdc0 -> 0xcdff + [ 0xcdff, ['Hangul']], + ], + [ # 0xce00 -> 0xce3f + [ 0xce3f, ['Hangul']], + ], + [ # 0xce40 -> 0xce7f + [ 0xce7f, ['Hangul']], + ], + [ # 0xce80 -> 0xcebf + [ 0xcebf, ['Hangul']], + ], + [ # 0xcec0 -> 0xceff + [ 0xceff, ['Hangul']], + ], + [ # 0xcf00 -> 0xcf3f + [ 0xcf3f, ['Hangul']], + ], + [ # 0xcf40 -> 0xcf7f + [ 0xcf7f, ['Hangul']], + ], + [ # 0xcf80 -> 0xcfbf + [ 0xcfbf, ['Hangul']], + ], + [ # 0xcfc0 -> 0xcfff + [ 0xcfff, ['Hangul']], + ], + [ # 0xd000 -> 0xd03f + [ 0xd03f, ['Hangul']], + ], + [ # 0xd040 -> 0xd07f + [ 0xd07f, ['Hangul']], + ], + [ # 0xd080 -> 0xd0bf + [ 0xd0bf, ['Hangul']], + ], + [ # 0xd0c0 -> 0xd0ff + [ 0xd0ff, ['Hangul']], + ], + [ # 0xd100 -> 0xd13f + [ 0xd13f, ['Hangul']], + ], + [ # 0xd140 -> 0xd17f + [ 0xd17f, ['Hangul']], + ], + [ # 0xd180 -> 0xd1bf + [ 0xd1bf, ['Hangul']], + ], + [ # 0xd1c0 -> 0xd1ff + [ 0xd1ff, ['Hangul']], + ], + [ # 0xd200 -> 0xd23f + [ 0xd23f, ['Hangul']], + ], + [ # 0xd240 -> 0xd27f + [ 0xd27f, ['Hangul']], + ], + [ # 0xd280 -> 0xd2bf + [ 0xd2bf, ['Hangul']], + ], + [ # 0xd2c0 -> 0xd2ff + [ 0xd2ff, ['Hangul']], + ], + [ # 0xd300 -> 0xd33f + [ 0xd33f, ['Hangul']], + ], + [ # 0xd340 -> 0xd37f + [ 0xd37f, ['Hangul']], + ], + [ # 0xd380 -> 0xd3bf + [ 0xd3bf, ['Hangul']], + ], + [ # 0xd3c0 -> 0xd3ff + [ 0xd3ff, ['Hangul']], + ], + [ # 0xd400 -> 0xd43f + [ 0xd43f, ['Hangul']], + ], + [ # 0xd440 -> 0xd47f + [ 0xd47f, ['Hangul']], + ], + [ # 0xd480 -> 0xd4bf + [ 0xd4bf, ['Hangul']], + ], + [ # 0xd4c0 -> 0xd4ff + [ 0xd4ff, ['Hangul']], + ], + [ # 0xd500 -> 0xd53f + [ 0xd53f, ['Hangul']], + ], + [ # 0xd540 -> 0xd57f + [ 0xd57f, ['Hangul']], + ], + [ # 0xd580 -> 0xd5bf + [ 0xd5bf, ['Hangul']], + ], + [ # 0xd5c0 -> 0xd5ff + [ 0xd5ff, ['Hangul']], + ], + [ # 0xd600 -> 0xd63f + [ 0xd63f, ['Hangul']], + ], + [ # 0xd640 -> 0xd67f + [ 0xd67f, ['Hangul']], + ], + [ # 0xd680 -> 0xd6bf + [ 0xd6bf, ['Hangul']], + ], + [ # 0xd6c0 -> 0xd6ff + [ 0xd6ff, ['Hangul']], + ], + [ # 0xd700 -> 0xd73f + [ 0xd73f, ['Hangul']], + ], + [ # 0xd740 -> 0xd77f + [ 0xd77f, ['Hangul']], + ], + [ # 0xd780 -> 0xd7bf + [ 0xd7a3, ['Hangul']], + [ 0xd7af, ['Unknown']], + [ 0xd7bf, ['Hangul']], + ], + [ # 0xd7c0 -> 0xd7ff + [ 0xd7c6, ['Hangul']], + [ 0xd7ca, ['Unknown']], + [ 0xd7fb, ['Hangul']], + [ 0xd7ff, ['Unknown']], + ], + [ # 0xd800 -> 0xd83f + [ 0xd83f, ['Unknown']], + ], + [ # 0xd840 -> 0xd87f + [ 0xd87f, ['Unknown']], + ], + [ # 0xd880 -> 0xd8bf + [ 0xd8bf, ['Unknown']], + ], + [ # 0xd8c0 -> 0xd8ff + [ 0xd8ff, ['Unknown']], + ], + [ # 0xd900 -> 0xd93f + [ 0xd93f, ['Unknown']], + ], + [ # 0xd940 -> 0xd97f + [ 0xd97f, ['Unknown']], + ], + [ # 0xd980 -> 0xd9bf + [ 0xd9bf, ['Unknown']], + ], + [ # 0xd9c0 -> 0xd9ff + [ 0xd9ff, ['Unknown']], + ], + [ # 0xda00 -> 0xda3f + [ 0xda3f, ['Unknown']], + ], + [ # 0xda40 -> 0xda7f + [ 0xda7f, ['Unknown']], + ], + [ # 0xda80 -> 0xdabf + [ 0xdabf, ['Unknown']], + ], + [ # 0xdac0 -> 0xdaff + [ 0xdaff, ['Unknown']], + ], + [ # 0xdb00 -> 0xdb3f + [ 0xdb3f, ['Unknown']], + ], + [ # 0xdb40 -> 0xdb7f + [ 0xdb7f, ['Unknown']], + ], + [ # 0xdb80 -> 0xdbbf + [ 0xdbbf, ['Unknown']], + ], + [ # 0xdbc0 -> 0xdbff + [ 0xdbff, ['Unknown']], + ], + [ # 0xdc00 -> 0xdc3f + [ 0xdc3f, ['Unknown']], + ], + [ # 0xdc40 -> 0xdc7f + [ 0xdc7f, ['Unknown']], + ], + [ # 0xdc80 -> 0xdcbf + [ 0xdcbf, ['Unknown']], + ], + [ # 0xdcc0 -> 0xdcff + [ 0xdcff, ['Unknown']], + ], + [ # 0xdd00 -> 0xdd3f + [ 0xdd3f, ['Unknown']], + ], + [ # 0xdd40 -> 0xdd7f + [ 0xdd7f, ['Unknown']], + ], + [ # 0xdd80 -> 0xddbf + [ 0xddbf, ['Unknown']], + ], + [ # 0xddc0 -> 0xddff + [ 0xddff, ['Unknown']], + ], + [ # 0xde00 -> 0xde3f + [ 0xde3f, ['Unknown']], + ], + [ # 0xde40 -> 0xde7f + [ 0xde7f, ['Unknown']], + ], + [ # 0xde80 -> 0xdebf + [ 0xdebf, ['Unknown']], + ], + [ # 0xdec0 -> 0xdeff + [ 0xdeff, ['Unknown']], + ], + [ # 0xdf00 -> 0xdf3f + [ 0xdf3f, ['Unknown']], + ], + [ # 0xdf40 -> 0xdf7f + [ 0xdf7f, ['Unknown']], + ], + [ # 0xdf80 -> 0xdfbf + [ 0xdfbf, ['Unknown']], + ], + [ # 0xdfc0 -> 0xdfff + [ 0xdfff, ['Unknown']], + ], + [ # 0xe000 -> 0xe03f + [ 0xe03f, ['Unknown']], + ], + [ # 0xe040 -> 0xe07f + [ 0xe07f, ['Unknown']], + ], + [ # 0xe080 -> 0xe0bf + [ 0xe0bf, ['Unknown']], + ], + [ # 0xe0c0 -> 0xe0ff + [ 0xe0ff, ['Unknown']], + ], + [ # 0xe100 -> 0xe13f + [ 0xe13f, ['Unknown']], + ], + [ # 0xe140 -> 0xe17f + [ 0xe17f, ['Unknown']], + ], + [ # 0xe180 -> 0xe1bf + [ 0xe1bf, ['Unknown']], + ], + [ # 0xe1c0 -> 0xe1ff + [ 0xe1ff, ['Unknown']], + ], + [ # 0xe200 -> 0xe23f + [ 0xe23f, ['Unknown']], + ], + [ # 0xe240 -> 0xe27f + [ 0xe27f, ['Unknown']], + ], + [ # 0xe280 -> 0xe2bf + [ 0xe2bf, ['Unknown']], + ], + [ # 0xe2c0 -> 0xe2ff + [ 0xe2ff, ['Unknown']], + ], + [ # 0xe300 -> 0xe33f + [ 0xe33f, ['Unknown']], + ], + [ # 0xe340 -> 0xe37f + [ 0xe37f, ['Unknown']], + ], + [ # 0xe380 -> 0xe3bf + [ 0xe3bf, ['Unknown']], + ], + [ # 0xe3c0 -> 0xe3ff + [ 0xe3ff, ['Unknown']], + ], + [ # 0xe400 -> 0xe43f + [ 0xe43f, ['Unknown']], + ], + [ # 0xe440 -> 0xe47f + [ 0xe47f, ['Unknown']], + ], + [ # 0xe480 -> 0xe4bf + [ 0xe4bf, ['Unknown']], + ], + [ # 0xe4c0 -> 0xe4ff + [ 0xe4ff, ['Unknown']], + ], + [ # 0xe500 -> 0xe53f + [ 0xe53f, ['Unknown']], + ], + [ # 0xe540 -> 0xe57f + [ 0xe57f, ['Unknown']], + ], + [ # 0xe580 -> 0xe5bf + [ 0xe5bf, ['Unknown']], + ], + [ # 0xe5c0 -> 0xe5ff + [ 0xe5ff, ['Unknown']], + ], + [ # 0xe600 -> 0xe63f + [ 0xe63f, ['Unknown']], + ], + [ # 0xe640 -> 0xe67f + [ 0xe67f, ['Unknown']], + ], + [ # 0xe680 -> 0xe6bf + [ 0xe6bf, ['Unknown']], + ], + [ # 0xe6c0 -> 0xe6ff + [ 0xe6ff, ['Unknown']], + ], + [ # 0xe700 -> 0xe73f + [ 0xe73f, ['Unknown']], + ], + [ # 0xe740 -> 0xe77f + [ 0xe77f, ['Unknown']], + ], + [ # 0xe780 -> 0xe7bf + [ 0xe7bf, ['Unknown']], + ], + [ # 0xe7c0 -> 0xe7ff + [ 0xe7ff, ['Unknown']], + ], + [ # 0xe800 -> 0xe83f + [ 0xe83f, ['Unknown']], + ], + [ # 0xe840 -> 0xe87f + [ 0xe87f, ['Unknown']], + ], + [ # 0xe880 -> 0xe8bf + [ 0xe8bf, ['Unknown']], + ], + [ # 0xe8c0 -> 0xe8ff + [ 0xe8ff, ['Unknown']], + ], + [ # 0xe900 -> 0xe93f + [ 0xe93f, ['Unknown']], + ], + [ # 0xe940 -> 0xe97f + [ 0xe97f, ['Unknown']], + ], + [ # 0xe980 -> 0xe9bf + [ 0xe9bf, ['Unknown']], + ], + [ # 0xe9c0 -> 0xe9ff + [ 0xe9ff, ['Unknown']], + ], + [ # 0xea00 -> 0xea3f + [ 0xea3f, ['Unknown']], + ], + [ # 0xea40 -> 0xea7f + [ 0xea7f, ['Unknown']], + ], + [ # 0xea80 -> 0xeabf + [ 0xeabf, ['Unknown']], + ], + [ # 0xeac0 -> 0xeaff + [ 0xeaff, ['Unknown']], + ], + [ # 0xeb00 -> 0xeb3f + [ 0xeb3f, ['Unknown']], + ], + [ # 0xeb40 -> 0xeb7f + [ 0xeb7f, ['Unknown']], + ], + [ # 0xeb80 -> 0xebbf + [ 0xebbf, ['Unknown']], + ], + [ # 0xebc0 -> 0xebff + [ 0xebff, ['Unknown']], + ], + [ # 0xec00 -> 0xec3f + [ 0xec3f, ['Unknown']], + ], + [ # 0xec40 -> 0xec7f + [ 0xec7f, ['Unknown']], + ], + [ # 0xec80 -> 0xecbf + [ 0xecbf, ['Unknown']], + ], + [ # 0xecc0 -> 0xecff + [ 0xecff, ['Unknown']], + ], + [ # 0xed00 -> 0xed3f + [ 0xed3f, ['Unknown']], + ], + [ # 0xed40 -> 0xed7f + [ 0xed7f, ['Unknown']], + ], + [ # 0xed80 -> 0xedbf + [ 0xedbf, ['Unknown']], + ], + [ # 0xedc0 -> 0xedff + [ 0xedff, ['Unknown']], + ], + [ # 0xee00 -> 0xee3f + [ 0xee3f, ['Unknown']], + ], + [ # 0xee40 -> 0xee7f + [ 0xee7f, ['Unknown']], + ], + [ # 0xee80 -> 0xeebf + [ 0xeebf, ['Unknown']], + ], + [ # 0xeec0 -> 0xeeff + [ 0xeeff, ['Unknown']], + ], + [ # 0xef00 -> 0xef3f + [ 0xef3f, ['Unknown']], + ], + [ # 0xef40 -> 0xef7f + [ 0xef7f, ['Unknown']], + ], + [ # 0xef80 -> 0xefbf + [ 0xefbf, ['Unknown']], + ], + [ # 0xefc0 -> 0xefff + [ 0xefff, ['Unknown']], + ], + [ # 0xf000 -> 0xf03f + [ 0xf03f, ['Unknown']], + ], + [ # 0xf040 -> 0xf07f + [ 0xf07f, ['Unknown']], + ], + [ # 0xf080 -> 0xf0bf + [ 0xf0bf, ['Unknown']], + ], + [ # 0xf0c0 -> 0xf0ff + [ 0xf0ff, ['Unknown']], + ], + [ # 0xf100 -> 0xf13f + [ 0xf13f, ['Unknown']], + ], + [ # 0xf140 -> 0xf17f + [ 0xf17f, ['Unknown']], + ], + [ # 0xf180 -> 0xf1bf + [ 0xf1bf, ['Unknown']], + ], + [ # 0xf1c0 -> 0xf1ff + [ 0xf1ff, ['Unknown']], + ], + [ # 0xf200 -> 0xf23f + [ 0xf23f, ['Unknown']], + ], + [ # 0xf240 -> 0xf27f + [ 0xf27f, ['Unknown']], + ], + [ # 0xf280 -> 0xf2bf + [ 0xf2bf, ['Unknown']], + ], + [ # 0xf2c0 -> 0xf2ff + [ 0xf2ff, ['Unknown']], + ], + [ # 0xf300 -> 0xf33f + [ 0xf33f, ['Unknown']], + ], + [ # 0xf340 -> 0xf37f + [ 0xf37f, ['Unknown']], + ], + [ # 0xf380 -> 0xf3bf + [ 0xf3bf, ['Unknown']], + ], + [ # 0xf3c0 -> 0xf3ff + [ 0xf3ff, ['Unknown']], + ], + [ # 0xf400 -> 0xf43f + [ 0xf43f, ['Unknown']], + ], + [ # 0xf440 -> 0xf47f + [ 0xf47f, ['Unknown']], + ], + [ # 0xf480 -> 0xf4bf + [ 0xf4bf, ['Unknown']], + ], + [ # 0xf4c0 -> 0xf4ff + [ 0xf4ff, ['Unknown']], + ], + [ # 0xf500 -> 0xf53f + [ 0xf53f, ['Unknown']], + ], + [ # 0xf540 -> 0xf57f + [ 0xf57f, ['Unknown']], + ], + [ # 0xf580 -> 0xf5bf + [ 0xf5bf, ['Unknown']], + ], + [ # 0xf5c0 -> 0xf5ff + [ 0xf5ff, ['Unknown']], + ], + [ # 0xf600 -> 0xf63f + [ 0xf63f, ['Unknown']], + ], + [ # 0xf640 -> 0xf67f + [ 0xf67f, ['Unknown']], + ], + [ # 0xf680 -> 0xf6bf + [ 0xf6bf, ['Unknown']], + ], + [ # 0xf6c0 -> 0xf6ff + [ 0xf6ff, ['Unknown']], + ], + [ # 0xf700 -> 0xf73f + [ 0xf73f, ['Unknown']], + ], + [ # 0xf740 -> 0xf77f + [ 0xf77f, ['Unknown']], + ], + [ # 0xf780 -> 0xf7bf + [ 0xf7bf, ['Unknown']], + ], + [ # 0xf7c0 -> 0xf7ff + [ 0xf7ff, ['Unknown']], + ], + [ # 0xf800 -> 0xf83f + [ 0xf83f, ['Unknown']], + ], + [ # 0xf840 -> 0xf87f + [ 0xf87f, ['Unknown']], + ], + [ # 0xf880 -> 0xf8bf + [ 0xf8bf, ['Unknown']], + ], + [ # 0xf8c0 -> 0xf8ff + [ 0xf8ff, ['Unknown']], + ], + [ # 0xf900 -> 0xf93f + [ 0xf93f, ['Han']], + ], + [ # 0xf940 -> 0xf97f + [ 0xf97f, ['Han']], + ], + [ # 0xf980 -> 0xf9bf + [ 0xf9bf, ['Han']], + ], + [ # 0xf9c0 -> 0xf9ff + [ 0xf9ff, ['Han']], + ], + [ # 0xfa00 -> 0xfa3f + [ 0xfa3f, ['Han']], + ], + [ # 0xfa40 -> 0xfa7f + [ 0xfa6d, ['Han']], + [ 0xfa6f, ['Unknown']], + [ 0xfa7f, ['Han']], + ], + [ # 0xfa80 -> 0xfabf + [ 0xfabf, ['Han']], + ], + [ # 0xfac0 -> 0xfaff + [ 0xfad9, ['Han']], + [ 0xfaff, ['Unknown']], + ], + [ # 0xfb00 -> 0xfb3f + [ 0xfb06, ['Latin']], + [ 0xfb12, ['Unknown']], + [ 0xfb17, ['Armenian']], + [ 0xfb1c, ['Unknown']], + [ 0xfb36, ['Hebrew']], + [ 0xfb37, ['Unknown']], + [ 0xfb3c, ['Hebrew']], + [ 0xfb3d, ['Unknown']], + [ 0xfb3f, ['Hebrew']], + ], + [ # 0xfb40 -> 0xfb7f + [ 0xfb41, ['Hebrew']], + [ 0xfb42, ['Unknown']], + [ 0xfb44, ['Hebrew']], + [ 0xfb45, ['Unknown']], + [ 0xfb4f, ['Hebrew']], + [ 0xfb7f, ['Arabic']], + ], + [ # 0xfb80 -> 0xfbbf + [ 0xfbbf, ['Arabic']], + ], + [ # 0xfbc0 -> 0xfbff + [ 0xfbc2, ['Arabic']], + [ 0xfbd2, ['Unknown']], + [ 0xfbff, ['Arabic']], + ], + [ # 0xfc00 -> 0xfc3f + [ 0xfc3f, ['Arabic']], + ], + [ # 0xfc40 -> 0xfc7f + [ 0xfc7f, ['Arabic']], + ], + [ # 0xfc80 -> 0xfcbf + [ 0xfcbf, ['Arabic']], + ], + [ # 0xfcc0 -> 0xfcff + [ 0xfcff, ['Arabic']], + ], + [ # 0xfd00 -> 0xfd3f + [ 0xfd3d, ['Arabic']], + [ 0xfd3f, ['Arabic', 'Common', 'Nko']], + ], + [ # 0xfd40 -> 0xfd7f + [ 0xfd40, ['Arabic', 'Common', 'Nko']], + [ 0xfd7f, ['Arabic']], + ], + [ # 0xfd80 -> 0xfdbf + [ 0xfd8f, ['Arabic']], + [ 0xfd91, ['Unknown']], + [ 0xfdbf, ['Arabic']], + ], + [ # 0xfdc0 -> 0xfdff + [ 0xfdc7, ['Arabic']], + [ 0xfdce, ['Unknown']], + [ 0xfdd0, ['Arabic']], + [ 0xfdef, ['Unknown']], + [ 0xfdf1, ['Arabic']], + [ 0xfdf3, ['Arabic', 'Thaana']], + [ 0xfdfc, ['Arabic']], + [ 0xfdfe, ['Arabic', 'Thaana']], + [ 0xfdff, ['Arabic']], + ], + [ # 0xfe00 -> 0xfe3f + [ 0xfe0f, ['Inherited']], + [ 0xfe1a, ['Common']], + [ 0xfe1f, ['Unknown']], + [ 0xfe2d, ['Inherited']], + [ 0xfe2f, ['Cyrillic']], + [ 0xfe3f, ['Common']], + ], + [ # 0xfe40 -> 0xfe7f + [ 0xfe44, ['Common']], + [ 0xfe46, ['Bopomofo', 'Common', 'Han', 'Hangul', 'Hiragana', 'Katakana']], + [ 0xfe52, ['Common']], + [ 0xfe53, ['Unknown']], + [ 0xfe66, ['Common']], + [ 0xfe67, ['Unknown']], + [ 0xfe6b, ['Common']], + [ 0xfe6f, ['Unknown']], + [ 0xfe74, ['Arabic']], + [ 0xfe75, ['Unknown']], + [ 0xfe7f, ['Arabic']], + ], + [ # 0xfe80 -> 0xfebf + [ 0xfebf, ['Arabic']], + ], + [ # 0xfec0 -> 0xfeff + [ 0xfefc, ['Arabic']], + [ 0xfefe, ['Unknown']], + [ 0xfeff, ['Common']], + ], + [ # 0xff00 -> 0xff3f + [ 0xff20, ['Common']], + [ 0xff3a, ['Latin']], + [ 0xff3f, ['Common']], + ], + [ # 0xff40 -> 0xff7f + [ 0xff40, ['Common']], + [ 0xff41, ['Common', 'Latin']], + [ 0xff5a, ['Latin']], + [ 0xff60, ['Common']], + [ 0xff65, ['Bopomofo', 'Common', 'Han', 'Hangul', 'Hiragana', 'Katakana', 'Yi']], + [ 0xff6f, ['Katakana']], + [ 0xff71, ['Common', 'Hiragana', 'Katakana']], + [ 0xff7f, ['Katakana']], + ], + [ # 0xff80 -> 0xffbf + [ 0xff9d, ['Katakana']], + [ 0xff9f, ['Common', 'Hiragana', 'Katakana']], + [ 0xffbe, ['Hangul']], + [ 0xffbf, ['Unknown']], + ], + [ # 0xffc0 -> 0xffff + [ 0xffc1, ['Unknown']], + [ 0xffc7, ['Hangul']], + [ 0xffc9, ['Unknown']], + [ 0xffcf, ['Hangul']], + [ 0xffd1, ['Unknown']], + [ 0xffd7, ['Hangul']], + [ 0xffd9, ['Unknown']], + [ 0xffdc, ['Hangul']], + [ 0xffdf, ['Unknown']], + [ 0xffe6, ['Common']], + [ 0xffe7, ['Unknown']], + [ 0xffee, ['Common']], + [ 0xfff8, ['Unknown']], + [ 0xfffd, ['Common']], + [ 0xffff, ['Unknown']], + ], +] +BUCKETS_010000_110000 = [ + [ # 0x10000 -> 0x17fff + [ 0x1000b, ['Linear_B']], + [ 0x1000c, ['Unknown']], + [ 0x10026, ['Linear_B']], + [ 0x10027, ['Unknown']], + [ 0x1003a, ['Linear_B']], + [ 0x1003b, ['Unknown']], + [ 0x1003d, ['Linear_B']], + [ 0x1003e, ['Unknown']], + [ 0x1004d, ['Linear_B']], + [ 0x1004f, ['Unknown']], + [ 0x1005d, ['Linear_B']], + [ 0x1007f, ['Unknown']], + [ 0x100fa, ['Linear_B']], + [ 0x100ff, ['Unknown']], + [ 0x10101, ['Common', 'Cypriot', 'Cypro_Minoan', 'Linear_B']], + [ 0x10102, ['Common', 'Cypriot', 'Linear_B']], + [ 0x10103, ['Cypriot', 'Linear_B']], + [ 0x10106, ['Unknown']], + [ 0x10133, ['Common', 'Cypriot', 'Linear_A', 'Linear_B']], + [ 0x10136, ['Unknown']], + [ 0x1013f, ['Common', 'Cypriot', 'Linear_B']], + [ 0x1018e, ['Greek']], + [ 0x1018f, ['Unknown']], + [ 0x1019c, ['Common']], + [ 0x1019f, ['Unknown']], + [ 0x101a1, ['Greek']], + [ 0x101cf, ['Unknown']], + [ 0x101fc, ['Common']], + [ 0x101fe, ['Inherited']], + [ 0x1027f, ['Unknown']], + [ 0x1029c, ['Lycian']], + [ 0x1029f, ['Unknown']], + [ 0x102d0, ['Carian']], + [ 0x102df, ['Unknown']], + [ 0x102e0, ['Arabic', 'Coptic', 'Inherited']], + [ 0x102e1, ['Arabic', 'Common', 'Coptic', 'Inherited']], + [ 0x102fb, ['Arabic', 'Common', 'Coptic']], + [ 0x102ff, ['Unknown']], + [ 0x10323, ['Old_Italic']], + [ 0x1032c, ['Unknown']], + [ 0x1032f, ['Old_Italic']], + [ 0x1034b, ['Gothic']], + [ 0x1034f, ['Unknown']], + [ 0x1037a, ['Old_Permic']], + [ 0x1037f, ['Unknown']], + [ 0x1039d, ['Ugaritic']], + [ 0x1039e, ['Unknown']], + [ 0x1039f, ['Ugaritic']], + [ 0x103a0, ['Old_Persian', 'Ugaritic']], + [ 0x103c3, ['Old_Persian']], + [ 0x103c7, ['Unknown']], + [ 0x103d5, ['Old_Persian']], + [ 0x103ff, ['Unknown']], + [ 0x1044f, ['Deseret']], + [ 0x1047f, ['Shavian']], + [ 0x1049d, ['Osmanya']], + [ 0x1049f, ['Unknown']], + [ 0x104a9, ['Osmanya']], + [ 0x104af, ['Unknown']], + [ 0x104d3, ['Osage']], + [ 0x104d7, ['Unknown']], + [ 0x104fb, ['Osage']], + [ 0x104ff, ['Unknown']], + [ 0x10527, ['Elbasan']], + [ 0x1052f, ['Unknown']], + [ 0x10563, ['Caucasian_Albanian']], + [ 0x1056e, ['Unknown']], + [ 0x1056f, ['Caucasian_Albanian']], + [ 0x10570, ['Caucasian_Albanian', 'Vithkuqi']], + [ 0x1057a, ['Vithkuqi']], + [ 0x1057b, ['Unknown']], + [ 0x1058a, ['Vithkuqi']], + [ 0x1058b, ['Unknown']], + [ 0x10592, ['Vithkuqi']], + [ 0x10593, ['Unknown']], + [ 0x10595, ['Vithkuqi']], + [ 0x10596, ['Unknown']], + [ 0x105a1, ['Vithkuqi']], + [ 0x105a2, ['Unknown']], + [ 0x105b1, ['Vithkuqi']], + [ 0x105b2, ['Unknown']], + [ 0x105b9, ['Vithkuqi']], + [ 0x105ba, ['Unknown']], + [ 0x105bc, ['Vithkuqi']], + [ 0x105ff, ['Unknown']], + [ 0x10736, ['Linear_A']], + [ 0x1073f, ['Unknown']], + [ 0x10755, ['Linear_A']], + [ 0x1075f, ['Unknown']], + [ 0x10767, ['Linear_A']], + [ 0x1077f, ['Unknown']], + [ 0x10785, ['Latin']], + [ 0x10786, ['Unknown']], + [ 0x107b0, ['Latin']], + [ 0x107b1, ['Unknown']], + [ 0x107ba, ['Latin']], + [ 0x107ff, ['Unknown']], + [ 0x10805, ['Cypriot']], + [ 0x10807, ['Unknown']], + [ 0x10835, ['Cypriot']], + [ 0x10836, ['Unknown']], + [ 0x10838, ['Cypriot']], + [ 0x1083b, ['Unknown']], + [ 0x1083d, ['Cypriot']], + [ 0x1083e, ['Unknown']], + [ 0x1083f, ['Cypriot']], + [ 0x10840, ['Cypriot', 'Imperial_Aramaic']], + [ 0x10855, ['Imperial_Aramaic']], + [ 0x10856, ['Unknown']], + [ 0x1085f, ['Imperial_Aramaic']], + [ 0x1087f, ['Palmyrene']], + [ 0x1089e, ['Nabataean']], + [ 0x108a6, ['Unknown']], + [ 0x108af, ['Nabataean']], + [ 0x108df, ['Unknown']], + [ 0x108f2, ['Hatran']], + [ 0x108f3, ['Unknown']], + [ 0x108f5, ['Hatran']], + [ 0x108fa, ['Unknown']], + [ 0x108ff, ['Hatran']], + [ 0x1091b, ['Phoenician']], + [ 0x1091e, ['Unknown']], + [ 0x1091f, ['Phoenician']], + [ 0x10920, ['Lydian', 'Phoenician']], + [ 0x10939, ['Lydian']], + [ 0x1093e, ['Unknown']], + [ 0x10940, ['Lydian']], + [ 0x1097f, ['Unknown']], + [ 0x1099f, ['Meroitic_Hieroglyphs']], + [ 0x109b7, ['Meroitic_Cursive']], + [ 0x109bb, ['Unknown']], + [ 0x109cf, ['Meroitic_Cursive']], + [ 0x109d1, ['Unknown']], + [ 0x109ff, ['Meroitic_Cursive']], + [ 0x10a03, ['Kharoshthi']], + [ 0x10a04, ['Unknown']], + [ 0x10a06, ['Kharoshthi']], + [ 0x10a0b, ['Unknown']], + [ 0x10a13, ['Kharoshthi']], + [ 0x10a14, ['Unknown']], + [ 0x10a17, ['Kharoshthi']], + [ 0x10a18, ['Unknown']], + [ 0x10a35, ['Kharoshthi']], + [ 0x10a37, ['Unknown']], + [ 0x10a3a, ['Kharoshthi']], + [ 0x10a3e, ['Unknown']], + [ 0x10a48, ['Kharoshthi']], + [ 0x10a4f, ['Unknown']], + [ 0x10a58, ['Kharoshthi']], + [ 0x10a5f, ['Unknown']], + [ 0x10a7f, ['Old_South_Arabian']], + [ 0x10a80, ['Old_North_Arabian', 'Old_South_Arabian']], + [ 0x10a9f, ['Old_North_Arabian']], + [ 0x10abf, ['Unknown']], + [ 0x10ae6, ['Manichaean']], + [ 0x10aea, ['Unknown']], + [ 0x10af1, ['Manichaean']], + [ 0x10af3, ['Manichaean', 'Old_Uyghur']], + [ 0x10af6, ['Manichaean']], + [ 0x10aff, ['Unknown']], + [ 0x10b35, ['Avestan']], + [ 0x10b38, ['Unknown']], + [ 0x10b3f, ['Avestan']], + [ 0x10b55, ['Inscriptional_Parthian']], + [ 0x10b57, ['Unknown']], + [ 0x10b5f, ['Inscriptional_Parthian']], + [ 0x10b72, ['Inscriptional_Pahlavi']], + [ 0x10b77, ['Unknown']], + [ 0x10b7f, ['Inscriptional_Pahlavi']], + [ 0x10b91, ['Psalter_Pahlavi']], + [ 0x10b98, ['Unknown']], + [ 0x10b9c, ['Psalter_Pahlavi']], + [ 0x10ba8, ['Unknown']], + [ 0x10baf, ['Psalter_Pahlavi']], + [ 0x10bff, ['Unknown']], + [ 0x10c48, ['Old_Turkic']], + [ 0x10c7f, ['Unknown']], + [ 0x10cb2, ['Old_Hungarian']], + [ 0x10cbf, ['Unknown']], + [ 0x10cf2, ['Old_Hungarian']], + [ 0x10cf9, ['Unknown']], + [ 0x10cff, ['Old_Hungarian']], + [ 0x10d27, ['Hanifi_Rohingya']], + [ 0x10d2f, ['Unknown']], + [ 0x10d39, ['Hanifi_Rohingya']], + [ 0x10e5f, ['Unknown']], + [ 0x10e7e, ['Arabic']], + [ 0x10e7f, ['Unknown']], + [ 0x10ea9, ['Yezidi']], + [ 0x10eaa, ['Unknown']], + [ 0x10eae, ['Yezidi']], + [ 0x10eaf, ['Unknown']], + [ 0x10eb1, ['Yezidi']], + [ 0x10efc, ['Unknown']], + [ 0x10eff, ['Arabic']], + [ 0x10f28, ['Old_Sogdian']], + [ 0x10f2f, ['Unknown']], + [ 0x10f59, ['Sogdian']], + [ 0x10f6f, ['Unknown']], + [ 0x10f89, ['Old_Uyghur']], + [ 0x10faf, ['Unknown']], + [ 0x10fcb, ['Chorasmian']], + [ 0x10fdf, ['Unknown']], + [ 0x10ff6, ['Elymaic']], + [ 0x10fff, ['Unknown']], + [ 0x1104d, ['Brahmi']], + [ 0x11051, ['Unknown']], + [ 0x11076, ['Brahmi']], + [ 0x1107e, ['Unknown']], + [ 0x1107f, ['Brahmi']], + [ 0x11080, ['Brahmi', 'Kaithi']], + [ 0x110c3, ['Kaithi']], + [ 0x110cc, ['Unknown']], + [ 0x110ce, ['Kaithi']], + [ 0x110cf, ['Unknown']], + [ 0x110e8, ['Sora_Sompeng']], + [ 0x110ef, ['Unknown']], + [ 0x110f9, ['Sora_Sompeng']], + [ 0x110ff, ['Unknown']], + [ 0x11134, ['Chakma']], + [ 0x11135, ['Unknown']], + [ 0x11148, ['Chakma']], + [ 0x1114f, ['Unknown']], + [ 0x11177, ['Mahajani']], + [ 0x1117f, ['Unknown']], + [ 0x111df, ['Sharada']], + [ 0x111e0, ['Unknown']], + [ 0x111f4, ['Sinhala']], + [ 0x111ff, ['Unknown']], + [ 0x11211, ['Khojki']], + [ 0x11212, ['Unknown']], + [ 0x11242, ['Khojki']], + [ 0x1127f, ['Unknown']], + [ 0x11286, ['Multani']], + [ 0x11287, ['Unknown']], + [ 0x1128d, ['Multani']], + [ 0x1128e, ['Unknown']], + [ 0x1129d, ['Multani']], + [ 0x1129e, ['Unknown']], + [ 0x112aa, ['Multani']], + [ 0x112af, ['Unknown']], + [ 0x112ea, ['Khudawadi']], + [ 0x112ef, ['Unknown']], + [ 0x112f9, ['Khudawadi']], + [ 0x112ff, ['Unknown']], + [ 0x11300, ['Grantha']], + [ 0x11304, ['Grantha', 'Tamil']], + [ 0x1130c, ['Grantha']], + [ 0x1130e, ['Unknown']], + [ 0x11310, ['Grantha']], + [ 0x11312, ['Unknown']], + [ 0x11328, ['Grantha']], + [ 0x11329, ['Unknown']], + [ 0x11330, ['Grantha']], + [ 0x11331, ['Unknown']], + [ 0x11333, ['Grantha']], + [ 0x11334, ['Unknown']], + [ 0x11339, ['Grantha']], + [ 0x1133a, ['Unknown']], + [ 0x1133c, ['Grantha', 'Inherited', 'Tamil']], + [ 0x11344, ['Grantha']], + [ 0x11346, ['Unknown']], + [ 0x11348, ['Grantha']], + [ 0x1134a, ['Unknown']], + [ 0x1134d, ['Grantha']], + [ 0x1134f, ['Unknown']], + [ 0x11351, ['Grantha']], + [ 0x11356, ['Unknown']], + [ 0x11358, ['Grantha']], + [ 0x1135c, ['Unknown']], + [ 0x11363, ['Grantha']], + [ 0x11365, ['Unknown']], + [ 0x1136c, ['Grantha']], + [ 0x1136f, ['Unknown']], + [ 0x11374, ['Grantha']], + [ 0x113ff, ['Unknown']], + [ 0x1145b, ['Newa']], + [ 0x1145c, ['Unknown']], + [ 0x11461, ['Newa']], + [ 0x1147f, ['Unknown']], + [ 0x114c8, ['Tirhuta']], + [ 0x114cf, ['Unknown']], + [ 0x114d9, ['Tirhuta']], + [ 0x1157f, ['Unknown']], + [ 0x115b5, ['Siddham']], + [ 0x115b7, ['Unknown']], + [ 0x115dd, ['Siddham']], + [ 0x115ff, ['Unknown']], + [ 0x11645, ['Modi']], + [ 0x1164f, ['Unknown']], + [ 0x11659, ['Modi']], + [ 0x1165f, ['Unknown']], + [ 0x1166c, ['Mongolian']], + [ 0x1167f, ['Unknown']], + [ 0x116ba, ['Takri']], + [ 0x116bf, ['Unknown']], + [ 0x116c9, ['Takri']], + [ 0x116ff, ['Unknown']], + [ 0x1171a, ['Ahom']], + [ 0x1171c, ['Unknown']], + [ 0x1172b, ['Ahom']], + [ 0x1172f, ['Unknown']], + [ 0x11746, ['Ahom']], + [ 0x117ff, ['Unknown']], + [ 0x1183c, ['Dogra']], + [ 0x1189f, ['Unknown']], + [ 0x118f2, ['Warang_Citi']], + [ 0x118fe, ['Unknown']], + [ 0x118ff, ['Warang_Citi']], + [ 0x11900, ['Dives_Akuru', 'Warang_Citi']], + [ 0x11906, ['Dives_Akuru']], + [ 0x11908, ['Unknown']], + [ 0x1190a, ['Dives_Akuru']], + [ 0x1190b, ['Unknown']], + [ 0x11913, ['Dives_Akuru']], + [ 0x11914, ['Unknown']], + [ 0x11916, ['Dives_Akuru']], + [ 0x11917, ['Unknown']], + [ 0x11935, ['Dives_Akuru']], + [ 0x11936, ['Unknown']], + [ 0x11938, ['Dives_Akuru']], + [ 0x1193a, ['Unknown']], + [ 0x11946, ['Dives_Akuru']], + [ 0x1194f, ['Unknown']], + [ 0x11959, ['Dives_Akuru']], + [ 0x1199f, ['Unknown']], + [ 0x119a7, ['Nandinagari']], + [ 0x119a9, ['Unknown']], + [ 0x119d7, ['Nandinagari']], + [ 0x119d9, ['Unknown']], + [ 0x119e5, ['Nandinagari']], + [ 0x119ff, ['Unknown']], + [ 0x11a48, ['Zanabazar_Square']], + [ 0x11a4f, ['Unknown']], + [ 0x11aa2, ['Soyombo']], + [ 0x11aaf, ['Unknown']], + [ 0x11abf, ['Canadian_Aboriginal']], + [ 0x11af8, ['Pau_Cin_Hau']], + [ 0x11aff, ['Unknown']], + [ 0x11b09, ['Devanagari']], + [ 0x11bff, ['Unknown']], + [ 0x11c08, ['Bhaiksuki']], + [ 0x11c09, ['Unknown']], + [ 0x11c36, ['Bhaiksuki']], + [ 0x11c37, ['Unknown']], + [ 0x11c45, ['Bhaiksuki']], + [ 0x11c4f, ['Unknown']], + [ 0x11c6c, ['Bhaiksuki']], + [ 0x11c6f, ['Unknown']], + [ 0x11c8f, ['Marchen']], + [ 0x11c91, ['Unknown']], + [ 0x11ca7, ['Marchen']], + [ 0x11ca8, ['Unknown']], + [ 0x11cb6, ['Marchen']], + [ 0x11cff, ['Unknown']], + [ 0x11d06, ['Masaram_Gondi']], + [ 0x11d07, ['Unknown']], + [ 0x11d09, ['Masaram_Gondi']], + [ 0x11d0a, ['Unknown']], + [ 0x11d36, ['Masaram_Gondi']], + [ 0x11d39, ['Unknown']], + [ 0x11d3d, ['Masaram_Gondi']], + [ 0x11d3e, ['Unknown']], + [ 0x11d48, ['Masaram_Gondi']], + [ 0x11d4f, ['Unknown']], + [ 0x11d59, ['Masaram_Gondi']], + [ 0x11d5f, ['Unknown']], + [ 0x11d65, ['Gunjala_Gondi']], + [ 0x11d66, ['Unknown']], + [ 0x11d68, ['Gunjala_Gondi']], + [ 0x11d69, ['Unknown']], + [ 0x11d8e, ['Gunjala_Gondi']], + [ 0x11d8f, ['Unknown']], + [ 0x11d91, ['Gunjala_Gondi']], + [ 0x11d92, ['Unknown']], + [ 0x11d99, ['Gunjala_Gondi']], + [ 0x11d9f, ['Unknown']], + [ 0x11da9, ['Gunjala_Gondi']], + [ 0x11edf, ['Unknown']], + [ 0x11ef8, ['Makasar']], + [ 0x11eff, ['Unknown']], + [ 0x11f10, ['Kawi']], + [ 0x11f11, ['Unknown']], + [ 0x11f3a, ['Kawi']], + [ 0x11f3d, ['Unknown']], + [ 0x11f59, ['Kawi']], + [ 0x11faf, ['Unknown']], + [ 0x11fb1, ['Lisu']], + [ 0x11fbf, ['Unknown']], + [ 0x11fcf, ['Tamil']], + [ 0x11fd1, ['Grantha', 'Tamil']], + [ 0x11fd2, ['Tamil']], + [ 0x11fd4, ['Grantha', 'Tamil']], + [ 0x11ff1, ['Tamil']], + [ 0x11ffe, ['Unknown']], + [ 0x11fff, ['Tamil']], + [ 0x12000, ['Cuneiform', 'Tamil']], + [ 0x12399, ['Cuneiform']], + [ 0x123ff, ['Unknown']], + [ 0x1246e, ['Cuneiform']], + [ 0x1246f, ['Unknown']], + [ 0x12474, ['Cuneiform']], + [ 0x1247f, ['Unknown']], + [ 0x12543, ['Cuneiform']], + [ 0x12f8f, ['Unknown']], + [ 0x12ff2, ['Cypro_Minoan']], + [ 0x12fff, ['Unknown']], + [ 0x13455, ['Egyptian_Hieroglyphs']], + [ 0x143ff, ['Unknown']], + [ 0x14646, ['Anatolian_Hieroglyphs']], + [ 0x167ff, ['Unknown']], + [ 0x16a38, ['Bamum']], + [ 0x16a3f, ['Unknown']], + [ 0x16a5e, ['Mro']], + [ 0x16a5f, ['Unknown']], + [ 0x16a69, ['Mro']], + [ 0x16a6d, ['Unknown']], + [ 0x16a6f, ['Mro']], + [ 0x16abe, ['Tangsa']], + [ 0x16abf, ['Unknown']], + [ 0x16ac9, ['Tangsa']], + [ 0x16acf, ['Unknown']], + [ 0x16aed, ['Bassa_Vah']], + [ 0x16aef, ['Unknown']], + [ 0x16af6, ['Bassa_Vah']], + [ 0x16aff, ['Unknown']], + [ 0x16b46, ['Pahawh_Hmong']], + [ 0x16b4f, ['Unknown']], + [ 0x16b59, ['Pahawh_Hmong']], + [ 0x16b5a, ['Unknown']], + [ 0x16b61, ['Pahawh_Hmong']], + [ 0x16b62, ['Unknown']], + [ 0x16b77, ['Pahawh_Hmong']], + [ 0x16b7c, ['Unknown']], + [ 0x16b8f, ['Pahawh_Hmong']], + [ 0x16e3f, ['Unknown']], + [ 0x16e9a, ['Medefaidrin']], + [ 0x16eff, ['Unknown']], + [ 0x16f4a, ['Miao']], + [ 0x16f4e, ['Unknown']], + [ 0x16f87, ['Miao']], + [ 0x16f8e, ['Unknown']], + [ 0x16f9f, ['Miao']], + [ 0x16fdf, ['Unknown']], + [ 0x16fe0, ['Tangut']], + [ 0x16fe1, ['Nushu', 'Tangut']], + [ 0x16fe2, ['Han', 'Nushu']], + [ 0x16fe3, ['Han']], + [ 0x16fe4, ['Han', 'Khitan_Small_Script']], + [ 0x16fe5, ['Khitan_Small_Script']], + [ 0x16fef, ['Unknown']], + [ 0x16ff1, ['Han']], + [ 0x16fff, ['Unknown']], + [ 0x17fff, ['Tangut']], + ], + [ # 0x18000 -> 0x1ffff + [ 0x187f7, ['Tangut']], + [ 0x187ff, ['Unknown']], + [ 0x18aff, ['Tangut']], + [ 0x18cd5, ['Khitan_Small_Script']], + [ 0x18cff, ['Unknown']], + [ 0x18d08, ['Tangut']], + [ 0x1afef, ['Unknown']], + [ 0x1aff3, ['Katakana']], + [ 0x1aff4, ['Unknown']], + [ 0x1affb, ['Katakana']], + [ 0x1affc, ['Unknown']], + [ 0x1affe, ['Katakana']], + [ 0x1afff, ['Unknown']], + [ 0x1b000, ['Katakana']], + [ 0x1b001, ['Hiragana', 'Katakana']], + [ 0x1b11f, ['Hiragana']], + [ 0x1b122, ['Katakana']], + [ 0x1b131, ['Unknown']], + [ 0x1b133, ['Hiragana']], + [ 0x1b14f, ['Unknown']], + [ 0x1b152, ['Hiragana']], + [ 0x1b154, ['Unknown']], + [ 0x1b156, ['Katakana']], + [ 0x1b163, ['Unknown']], + [ 0x1b167, ['Katakana']], + [ 0x1b16f, ['Unknown']], + [ 0x1b2fb, ['Nushu']], + [ 0x1bbff, ['Unknown']], + [ 0x1bc6a, ['Duployan']], + [ 0x1bc6f, ['Unknown']], + [ 0x1bc7c, ['Duployan']], + [ 0x1bc7f, ['Unknown']], + [ 0x1bc88, ['Duployan']], + [ 0x1bc8f, ['Unknown']], + [ 0x1bc99, ['Duployan']], + [ 0x1bc9b, ['Unknown']], + [ 0x1bc9f, ['Duployan']], + [ 0x1bca3, ['Common', 'Duployan']], + [ 0x1ceff, ['Unknown']], + [ 0x1cf2d, ['Inherited']], + [ 0x1cf2f, ['Unknown']], + [ 0x1cf46, ['Inherited']], + [ 0x1cf4f, ['Unknown']], + [ 0x1cfc3, ['Common']], + [ 0x1cfff, ['Unknown']], + [ 0x1d0f5, ['Common']], + [ 0x1d0ff, ['Unknown']], + [ 0x1d126, ['Common']], + [ 0x1d128, ['Unknown']], + [ 0x1d166, ['Common']], + [ 0x1d169, ['Inherited']], + [ 0x1d17a, ['Common']], + [ 0x1d182, ['Inherited']], + [ 0x1d184, ['Common']], + [ 0x1d18b, ['Inherited']], + [ 0x1d1a9, ['Common']], + [ 0x1d1ad, ['Inherited']], + [ 0x1d1ea, ['Common']], + [ 0x1d1ff, ['Unknown']], + [ 0x1d246, ['Greek']], + [ 0x1d2bf, ['Unknown']], + [ 0x1d2d3, ['Common']], + [ 0x1d2df, ['Unknown']], + [ 0x1d2f3, ['Common']], + [ 0x1d2ff, ['Unknown']], + [ 0x1d356, ['Common']], + [ 0x1d35f, ['Unknown']], + [ 0x1d371, ['Common', 'Han']], + [ 0x1d378, ['Common']], + [ 0x1d3ff, ['Unknown']], + [ 0x1d454, ['Common']], + [ 0x1d455, ['Unknown']], + [ 0x1d49c, ['Common']], + [ 0x1d49d, ['Unknown']], + [ 0x1d49f, ['Common']], + [ 0x1d4a1, ['Unknown']], + [ 0x1d4a3, ['Common']], + [ 0x1d4a4, ['Unknown']], + [ 0x1d4a6, ['Common']], + [ 0x1d4a8, ['Unknown']], + [ 0x1d4ac, ['Common']], + [ 0x1d4ad, ['Unknown']], + [ 0x1d4b9, ['Common']], + [ 0x1d4ba, ['Unknown']], + [ 0x1d4c3, ['Common']], + [ 0x1d4c4, ['Unknown']], + [ 0x1d505, ['Common']], + [ 0x1d506, ['Unknown']], + [ 0x1d50a, ['Common']], + [ 0x1d50c, ['Unknown']], + [ 0x1d514, ['Common']], + [ 0x1d515, ['Unknown']], + [ 0x1d51c, ['Common']], + [ 0x1d51d, ['Unknown']], + [ 0x1d539, ['Common']], + [ 0x1d53a, ['Unknown']], + [ 0x1d53e, ['Common']], + [ 0x1d53f, ['Unknown']], + [ 0x1d544, ['Common']], + [ 0x1d545, ['Unknown']], + [ 0x1d547, ['Common']], + [ 0x1d549, ['Unknown']], + [ 0x1d550, ['Common']], + [ 0x1d551, ['Unknown']], + [ 0x1d6a5, ['Common']], + [ 0x1d6a7, ['Unknown']], + [ 0x1d7cb, ['Common']], + [ 0x1d7cd, ['Unknown']], + [ 0x1d7ff, ['Common']], + [ 0x1da8b, ['SignWriting']], + [ 0x1da9a, ['Unknown']], + [ 0x1da9f, ['SignWriting']], + [ 0x1daa0, ['Unknown']], + [ 0x1daaf, ['SignWriting']], + [ 0x1deff, ['Unknown']], + [ 0x1df1e, ['Latin']], + [ 0x1df24, ['Unknown']], + [ 0x1df2a, ['Latin']], + [ 0x1dfff, ['Unknown']], + [ 0x1e006, ['Glagolitic']], + [ 0x1e007, ['Unknown']], + [ 0x1e018, ['Glagolitic']], + [ 0x1e01a, ['Unknown']], + [ 0x1e021, ['Glagolitic']], + [ 0x1e022, ['Unknown']], + [ 0x1e024, ['Glagolitic']], + [ 0x1e025, ['Unknown']], + [ 0x1e02a, ['Glagolitic']], + [ 0x1e02f, ['Unknown']], + [ 0x1e06d, ['Cyrillic']], + [ 0x1e08e, ['Unknown']], + [ 0x1e090, ['Cyrillic']], + [ 0x1e0ff, ['Unknown']], + [ 0x1e12c, ['Nyiakeng_Puachue_Hmong']], + [ 0x1e12f, ['Unknown']], + [ 0x1e13d, ['Nyiakeng_Puachue_Hmong']], + [ 0x1e13f, ['Unknown']], + [ 0x1e149, ['Nyiakeng_Puachue_Hmong']], + [ 0x1e14d, ['Unknown']], + [ 0x1e150, ['Nyiakeng_Puachue_Hmong']], + [ 0x1e28f, ['Unknown']], + [ 0x1e2af, ['Toto']], + [ 0x1e2bf, ['Unknown']], + [ 0x1e2f9, ['Wancho']], + [ 0x1e2fe, ['Unknown']], + [ 0x1e300, ['Wancho']], + [ 0x1e4cf, ['Unknown']], + [ 0x1e4f9, ['Nag_Mundari']], + [ 0x1e7df, ['Unknown']], + [ 0x1e7e6, ['Ethiopic']], + [ 0x1e7e7, ['Unknown']], + [ 0x1e7eb, ['Ethiopic']], + [ 0x1e7ec, ['Unknown']], + [ 0x1e7ee, ['Ethiopic']], + [ 0x1e7ef, ['Unknown']], + [ 0x1e7fe, ['Ethiopic']], + [ 0x1e7ff, ['Unknown']], + [ 0x1e8c4, ['Mende_Kikakui']], + [ 0x1e8c6, ['Unknown']], + [ 0x1e8d6, ['Mende_Kikakui']], + [ 0x1e8ff, ['Unknown']], + [ 0x1e94c, ['Adlam']], + [ 0x1e94f, ['Unknown']], + [ 0x1e959, ['Adlam']], + [ 0x1e95d, ['Unknown']], + [ 0x1e95f, ['Adlam']], + [ 0x1ec70, ['Unknown']], + [ 0x1ecb4, ['Common']], + [ 0x1ed00, ['Unknown']], + [ 0x1ed3d, ['Common']], + [ 0x1edff, ['Unknown']], + [ 0x1ee03, ['Arabic']], + [ 0x1ee04, ['Unknown']], + [ 0x1ee1f, ['Arabic']], + [ 0x1ee20, ['Unknown']], + [ 0x1ee22, ['Arabic']], + [ 0x1ee23, ['Unknown']], + [ 0x1ee25, ['Arabic']], + [ 0x1ee26, ['Unknown']], + [ 0x1ee32, ['Arabic']], + [ 0x1ee33, ['Unknown']], + [ 0x1ee37, ['Arabic']], + [ 0x1ee38, ['Unknown']], + [ 0x1ee3c, ['Arabic']], + [ 0x1ee41, ['Unknown']], + [ 0x1ee43, ['Arabic']], + [ 0x1ee46, ['Unknown']], + [ 0x1ee4f, ['Arabic']], + [ 0x1ee50, ['Unknown']], + [ 0x1ee52, ['Arabic']], + [ 0x1ee53, ['Unknown']], + [ 0x1ee55, ['Arabic']], + [ 0x1ee56, ['Unknown']], + [ 0x1ee62, ['Arabic']], + [ 0x1ee63, ['Unknown']], + [ 0x1ee65, ['Arabic']], + [ 0x1ee66, ['Unknown']], + [ 0x1ee6a, ['Arabic']], + [ 0x1ee6b, ['Unknown']], + [ 0x1ee72, ['Arabic']], + [ 0x1ee73, ['Unknown']], + [ 0x1ee77, ['Arabic']], + [ 0x1ee78, ['Unknown']], + [ 0x1ee7c, ['Arabic']], + [ 0x1ee7d, ['Unknown']], + [ 0x1ee89, ['Arabic']], + [ 0x1ee8a, ['Unknown']], + [ 0x1ee9b, ['Arabic']], + [ 0x1eea0, ['Unknown']], + [ 0x1eea3, ['Arabic']], + [ 0x1eea4, ['Unknown']], + [ 0x1eea9, ['Arabic']], + [ 0x1eeaa, ['Unknown']], + [ 0x1eebb, ['Arabic']], + [ 0x1eeef, ['Unknown']], + [ 0x1eef1, ['Arabic']], + [ 0x1efff, ['Unknown']], + [ 0x1f02b, ['Common']], + [ 0x1f02f, ['Unknown']], + [ 0x1f093, ['Common']], + [ 0x1f09f, ['Unknown']], + [ 0x1f0ae, ['Common']], + [ 0x1f0b0, ['Unknown']], + [ 0x1f0bf, ['Common']], + [ 0x1f0c0, ['Unknown']], + [ 0x1f0cf, ['Common']], + [ 0x1f0d0, ['Unknown']], + [ 0x1f0f5, ['Common']], + [ 0x1f0ff, ['Unknown']], + [ 0x1f1ad, ['Common']], + [ 0x1f1e5, ['Unknown']], + [ 0x1f1ff, ['Common']], + [ 0x1f200, ['Hiragana']], + [ 0x1f201, ['Common', 'Hiragana']], + [ 0x1f202, ['Common']], + [ 0x1f20f, ['Unknown']], + [ 0x1f23b, ['Common']], + [ 0x1f23f, ['Unknown']], + [ 0x1f248, ['Common']], + [ 0x1f24f, ['Unknown']], + [ 0x1f251, ['Common', 'Han']], + [ 0x1f25f, ['Unknown']], + [ 0x1f265, ['Common']], + [ 0x1f2ff, ['Unknown']], + [ 0x1f6d7, ['Common']], + [ 0x1f6db, ['Unknown']], + [ 0x1f6ec, ['Common']], + [ 0x1f6ef, ['Unknown']], + [ 0x1f6fc, ['Common']], + [ 0x1f6ff, ['Unknown']], + [ 0x1f776, ['Common']], + [ 0x1f77a, ['Unknown']], + [ 0x1f7d9, ['Common']], + [ 0x1f7df, ['Unknown']], + [ 0x1f7eb, ['Common']], + [ 0x1f7ef, ['Unknown']], + [ 0x1f7f1, ['Common']], + [ 0x1f7ff, ['Unknown']], + [ 0x1f80b, ['Common']], + [ 0x1f80f, ['Unknown']], + [ 0x1f847, ['Common']], + [ 0x1f84f, ['Unknown']], + [ 0x1f859, ['Common']], + [ 0x1f85f, ['Unknown']], + [ 0x1f887, ['Common']], + [ 0x1f88f, ['Unknown']], + [ 0x1f8ad, ['Common']], + [ 0x1f8af, ['Unknown']], + [ 0x1f8b1, ['Common']], + [ 0x1f8ff, ['Unknown']], + [ 0x1fa53, ['Common']], + [ 0x1fa5f, ['Unknown']], + [ 0x1fa6d, ['Common']], + [ 0x1fa6f, ['Unknown']], + [ 0x1fa7c, ['Common']], + [ 0x1fa7f, ['Unknown']], + [ 0x1fa88, ['Common']], + [ 0x1fa8f, ['Unknown']], + [ 0x1fabd, ['Common']], + [ 0x1fabe, ['Unknown']], + [ 0x1fac5, ['Common']], + [ 0x1facd, ['Unknown']], + [ 0x1fadb, ['Common']], + [ 0x1fadf, ['Unknown']], + [ 0x1fae8, ['Common']], + [ 0x1faef, ['Unknown']], + [ 0x1faf8, ['Common']], + [ 0x1faff, ['Unknown']], + [ 0x1fb92, ['Common']], + [ 0x1fb93, ['Unknown']], + [ 0x1fbca, ['Common']], + [ 0x1fbef, ['Unknown']], + [ 0x1fbf9, ['Common']], + [ 0x1ffff, ['Unknown']], + ], + [ # 0x20000 -> 0x27fff + [ 0x27fff, ['Han']], + ], + [ # 0x28000 -> 0x2ffff + [ 0x2a6df, ['Han']], + [ 0x2a6ff, ['Unknown']], + [ 0x2b739, ['Han']], + [ 0x2b73f, ['Unknown']], + [ 0x2b81d, ['Han']], + [ 0x2b81f, ['Unknown']], + [ 0x2cea1, ['Han']], + [ 0x2ceaf, ['Unknown']], + [ 0x2ebe0, ['Han']], + [ 0x2ebef, ['Unknown']], + [ 0x2ee5d, ['Han']], + [ 0x2f7ff, ['Unknown']], + [ 0x2fa1d, ['Han']], + [ 0x2ffff, ['Unknown']], + ], + [ # 0x30000 -> 0x37fff + [ 0x3134a, ['Han']], + [ 0x3134f, ['Unknown']], + [ 0x323af, ['Han']], + [ 0x37fff, ['Unknown']], + ], + [ # 0x38000 -> 0x3ffff + [ 0x3ffff, ['Unknown']], + ], + [ # 0x40000 -> 0x47fff + [ 0x47fff, ['Unknown']], + ], + [ # 0x48000 -> 0x4ffff + [ 0x4ffff, ['Unknown']], + ], + [ # 0x50000 -> 0x57fff + [ 0x57fff, ['Unknown']], + ], + [ # 0x58000 -> 0x5ffff + [ 0x5ffff, ['Unknown']], + ], + [ # 0x60000 -> 0x67fff + [ 0x67fff, ['Unknown']], + ], + [ # 0x68000 -> 0x6ffff + [ 0x6ffff, ['Unknown']], + ], + [ # 0x70000 -> 0x77fff + [ 0x77fff, ['Unknown']], + ], + [ # 0x78000 -> 0x7ffff + [ 0x7ffff, ['Unknown']], + ], + [ # 0x80000 -> 0x87fff + [ 0x87fff, ['Unknown']], + ], + [ # 0x88000 -> 0x8ffff + [ 0x8ffff, ['Unknown']], + ], + [ # 0x90000 -> 0x97fff + [ 0x97fff, ['Unknown']], + ], + [ # 0x98000 -> 0x9ffff + [ 0x9ffff, ['Unknown']], + ], + [ # 0xa0000 -> 0xa7fff + [ 0xa7fff, ['Unknown']], + ], + [ # 0xa8000 -> 0xaffff + [ 0xaffff, ['Unknown']], + ], + [ # 0xb0000 -> 0xb7fff + [ 0xb7fff, ['Unknown']], + ], + [ # 0xb8000 -> 0xbffff + [ 0xbffff, ['Unknown']], + ], + [ # 0xc0000 -> 0xc7fff + [ 0xc7fff, ['Unknown']], + ], + [ # 0xc8000 -> 0xcffff + [ 0xcffff, ['Unknown']], + ], + [ # 0xd0000 -> 0xd7fff + [ 0xd7fff, ['Unknown']], + ], + [ # 0xd8000 -> 0xdffff + [ 0xdffff, ['Unknown']], + ], + [ # 0xe0000 -> 0xe7fff + [ 0xe0000, ['Unknown']], + [ 0xe0002, ['Common']], + [ 0xe001f, ['Unknown']], + [ 0xe007f, ['Common']], + [ 0xe00ff, ['Unknown']], + [ 0xe01ef, ['Inherited']], + [ 0xe7fff, ['Unknown']], + ], + [ # 0xe8000 -> 0xeffff + [ 0xeffff, ['Unknown']], + ], + [ # 0xf0000 -> 0xf7fff + [ 0xf7fff, ['Unknown']], + ], + [ # 0xf8000 -> 0xfffff + [ 0xfffff, ['Unknown']], + ], + [ # 0x100000 -> 0x107fff + [ 0x107fff, ['Unknown']], + ], + [ # 0x108000 -> 0x10ffff + [ 0x10ffff, ['Unknown']], + ], +] diff --git a/update/make_unidata.py b/update/make_unidata.py old mode 100755 new mode 100644 index 556a588..70b2984 --- a/update/make_unidata.py +++ b/update/make_unidata.py @@ -1,96 +1,209 @@ #!/usr/bin/env python3 -import sys -import fileinput +''' +Regenerates the uniscripts tables from online unicode specifications +''' +import re -Scripts='Scripts.txt' -ScriptExtensions='ScriptExtensions.txt' -PropertyValueAliases='PropertyValueAliases.txt' +SCRIPTS_PATH='Scripts.txt' +SCRIPT_EXTENSIONS_PATH='ScriptExtensions.txt' +PROPERTY_VALUE_ALIASES_PATH='PropertyValueAliases.txt' -SCRIPT_ABBREVS = {} - -with open(PropertyValueAliases, 'r') as f: - for line in f: - line = line.strip() - if len(line) == 0 or line[0] == '#': - continue - - if line[0:2] != 'sc': - continue - - if '#' in line: - line = line[0 : line.index('#')] - - fields = line.split(';') - fields = [field.strip() for field in fields] - - if fields[0] != 'sc': - continue - - SCRIPT_ABBREVS[fields[1]] = fields[2] - - -RANGES={} def parse_uni_range(range_str): - '''Convert Unicode range notation to Python ranges. + """ + Convert Unicode range notation to Python ranges. -Single codepoints are converted to single-number ranges. That is: + Single codepoints are converted to single-number ranges. That is: -'0001..0003' -> range(1, 4) -'0001' -> range(1, 2) - ''' + '0001..0003' -> range(1, 4) + '0001' -> range(1, 2) + """ start_stop_strs = range_str.split('..') start = int(start_stop_strs[0], 16) + end = int(start_stop_strs[1], 16) if len(start_stop_strs) > 1 else start + 1 + + return range(start, end + 1) - if len(start_stop_strs) > 1: - end = int(start_stop_strs[1], 16) - else: - end = start + 1 - char_range = range(start, end+1) - return(char_range) +def read_script_abbrevs(property_value_aliases_path): + '''load the script abbreviations from file''' + script_abbrevs = {} + with open(property_value_aliases_path, 'r', encoding="utf-8") as f: + for line in f: + line = line.strip() + if len(line) == 0 or line[0] == '#': + continue + if line[0:2] != 'sc': + continue -with open(Scripts, 'r') as f: - for line in f: - line = line.strip() + if '#' in line: + line = line[0 : line.index('#')] - if len(line) == 0 or line[0] == '#': - continue + fields = line.split(';') + fields = [field.strip() for field in fields] - if '#' in line: - line = line[0 : line.index('#')] + if fields[0] != 'sc': + continue - fields = line.split(';') - fields = [field.strip() for field in fields] + script_abbrevs[fields[1]] = fields[2] - if fields[1] not in RANGES.keys(): - RANGES[fields[1]] = [] + return script_abbrevs - RANGES[fields[1]].append(parse_uni_range(fields[0])) +def read_version(scripts_path): + '''load version from file''' + with open(scripts_path, 'r', encoding="utf-8") as f: + for line in f: + line = line.strip() -with open(ScriptExtensions, 'r') as f: - for line in f: - line = line.strip() + if len(line) == 0 or line[0] == '#': + pattern = r"# Scripts-(\d+\.\d+\.\d+)\.txt" + match = re.match(pattern, line) + if match: + return match.group(1) + return None - if len(line) == 0 or line[0] == '#': - continue +def read_ranges(scripts_path): + '''load ranges from file''' + script_ranges={} - if '#' in line: - line = line[0 : line.index('#')] + with open(scripts_path, 'r', encoding="utf-8") as f: + for line in f: + line = line.strip() - fields = line.split(';') - fields = [field.strip() for field in fields] + if len(line) == 0 or line[0] == '#': + continue - char_range = parse_uni_range(fields[0]) - scripts = fields[1].split() + if '#' in line: + line = line[0 : line.index('#')] - for script_shortname in scripts: - longname = SCRIPT_ABBREVS[script_shortname] - RANGES[longname].append(char_range) + fields = line.split(';') + fields = [field.strip() for field in fields] -# this facilitates tests later on -if 'Unknown' not in RANGES.keys(): - RANGES['Unknown'] = [] + if fields[1] not in script_ranges: + script_ranges[fields[1]] = [] -print('RANGES = ' + repr(RANGES)) -print('SCRIPT_ABBREVS = ' + repr(SCRIPT_ABBREVS)) + script_ranges[fields[1]].append(parse_uni_range(fields[0])) + return script_ranges + +def read_extensions(script_extensions_path, script_abbrevs, script_ranges): + '''load additional ranges from script extensions''' + with open(script_extensions_path, 'r', encoding="utf-8") as f: + for line in f: + line = line.strip() + + if len(line) == 0 or line[0] == '#': + continue + + if '#' in line: + line = line[0 : line.index('#')] + + fields = line.split(';') + fields = [field.strip() for field in fields] + + char_range = parse_uni_range(fields[0]) + scripts = fields[1].split() + + for script_shortname in scripts: + longname = script_abbrevs[script_shortname] + script_ranges[longname].append(char_range) + +def slow_which_scripts(char, script_ranges): + """Returns a list of scripts that char belongs to.""" + cp = ord(char) + return [script for script, ranges in script_ranges.items() + if any(cp in seq for seq in ranges)] or ['Unknown'] + +def get_bucket_inner_ranges(bucket_range: range, script_ranges): + """ + Returns a list of ranges and corresponding scripts within the specified range. + + Parameters: + - bucket_range: The range to analyze. + + Returns: + A list of tuples containing ranges and scripts. + """ + range_start = bucket_range.start + i = range_start + last_script = None + ranges = [] + + while i < bucket_range.stop: + script = slow_which_scripts(chr(i), script_ranges) + + if script != last_script: + if last_script is not None: + ranges.append([range(range_start, i), last_script]) + range_start = i + + last_script = script + i += 1 + + ranges.append([range(range_start, i), last_script]) + return ranges + +def main(): + """ + Main function to generate Unicode lookup data from http://ftp.unicode.org/Public/UNIDATA. + """ + + script_abbrevs = read_script_abbrevs(PROPERTY_VALUE_ALIASES_PATH) + script_ranges = read_ranges(SCRIPTS_PATH) + unicode_version = read_version(SCRIPTS_PATH) + read_extensions(SCRIPT_EXTENSIONS_PATH, script_abbrevs, script_ranges) + + # Facilitate tests later on + script_ranges.setdefault('Unknown', []) + + print("'''Unicode lookup data generated from http://ftp.unicode.org/Public/UNIDATA'''") + print() + print("# pylint: disable=too-many-lines, line-too-long, too-few-public-methods") + + print(f"__unicode_version__ = '{unicode_version}'") + print() + + print("class Scripts:") + print(" '''List of supported script names'''") + for v in sorted(script_abbrevs.values()): + print(f" {v.upper()} = '{v}'") + print() + + print("SCRIPT_ABBREVS = {") + for k, v in script_abbrevs.items(): + print(f" '{k}': '{v}',") + print("}") + print() + + # Subdivide the Unicode space in increments of 1024 + # This allows an initial fast lookup by dividing the character value + # by 1024 into the corresponding index, limiting the number of ranges + # to further search + nb_buckets_low = 1024 # must be a power of 2 + bucket_width_low = 0x010000 // nb_buckets_low + print("BUCKETS_000000_010000 = [") + for bucket_index in range(0, nb_buckets_low): + bucket_range = range(bucket_index * bucket_width_low, (bucket_index + 1) * bucket_width_low) + inner_ranges = get_bucket_inner_ranges(bucket_range, script_ranges) + print(f" [ # {hex(bucket_range.start)} -> {hex(bucket_range.stop-1)}") + for ir in inner_ranges: + print(f" [ {hex(ir[0].stop-1)}, {sorted(ir[1])}],") + print(" ],") + print("]") + + nb_buckets_high = 32 # must be a power of 2 + bucket_width_high = 0x100000 // nb_buckets_high + print("BUCKETS_010000_110000 = [") + for bucket_index in range(0, nb_buckets_high): + bucket_range = range(0x010000 + bucket_index * bucket_width_high, + 0x010000 + (bucket_index + 1) * bucket_width_high) + inner_ranges = get_bucket_inner_ranges(bucket_range, script_ranges) + print(f" [ # {hex(bucket_range.start)} -> {hex(bucket_range.stop-1)}") + for ir in inner_ranges: + print(f" [ {hex(ir[0].stop-1)}, {sorted(ir[1])}],") + print(" ],") + print("]") + + + +if __name__ == "__main__": + main() diff --git a/update/update.sh b/update/update.sh old mode 100755 new mode 100644